2D游戏中的地图通常用二维数组来表示:
假如一幅地图由以下的几种基本的块组成:
1    2    3    4   5   6   7   8   9
有如下10 × 30的二维数组:
short map[][] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 6, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0, 
0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 6, 0, 0 },
{ 0, 0, 0, 0, 5, 6, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0, 
0, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 0, 0, 0, 0, 3, 4, 0, 0, 0, 3, 1, 1, 1, 8, 2, 2, 
2, 2, 2, 7, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 2, 2, 2, 2, 7, 8, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 2 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};
请写程序完成如下功能:
1.把二维数组保存到指定文件(例如level0.map)。
2.从文件中加载(读取)二维数组,并打印。
文件格式如下:
  4byte           4byte               nbyte
行数(int型)    列数(int型)    数组数据(每个元素都是short型)

下面是我写的代码import java.io.FileOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.DataInputStream;
import java.io.FileNotFoundException;
import java.io.EOFException ;
import java.io.IOException;
public class TestTwo{
      public static void main(String[] args){
      short map[][] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 6, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0, 
0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 6, 0, 0 },
{ 0, 0, 0, 0, 5, 6, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0, 
0, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 0, 0, 0, 0, 3, 4, 0, 0, 0, 3, 1, 1, 1, 8, 2, 2, 
2, 2, 2, 7, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 2, 2, 2, 2, 7, 8, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 2 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};    DataOutputStream dataOutput = null;
    DataInputStream  dataInput = null;
    
    
    try{
       
       dataOutput = new  DataOutputStream(new FileOutputStream("level10.map"));
       dataInput = new DataInputStream(new FileInputStream("level10.map"));
       
       dataOutput.writeInt(10);
       dataOutput.writeInt(30);
       for(int i=0;i<10;++i)
        for(int j=0;j<30;++j)
          {
         dataOutput.writeShort(map[i][j]);
    dataOutput.flush();
         }
     
       int c1,c2;
       short c;
       int i = 1;
       c1 = dataInput.readInt();
       c2 = dataInput.readInt();
       
       try{       while((c =  dataInput.readShort())!= -1){
           
        
           System.out.print(c);
           if(i % 30 == 0)
           System.out.println();
              ++i;
       }
       
       }catch(EOFException e){
        e.printStackTrace();
       }catch(IOException e){
        e.printStackTrace();
       }
       
       dataOutput.close();
       dataInput.close();
       
         
      }catch(FileNotFoundException e){
     e.printStackTrace();
    }
    
    
    catch(IOException e){
        e.printStackTrace();
    }
    
   }
    
}
运行结果如下:
F:\ >javac TestTwo.javaF:\ >java TestTwo
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000522260000000000000000
000000000311140000000000000000
000000000311140000052222222600
000056000311140000031111111400
000034000311182222271111111400
222278222111111111111111111822
111111111111111111111111111111
java.io.EOFException
        at java.io.DataInputStream.readShort(DataInputStream.java:298)
        at TestTwo.main(TestTwo.java:69)
我明明在红色部分捕捉了文件结束异常,为什么还有这个错误呢?
请大家帮忙看一下子!!!

解决方案 »

  1.   


    try{      while((c =  dataInput.readShort())!= -1){
               
            
                  System.out.print(c);
                  if(i % 30 == 0)
                  System.out.println();
                  ++i;
           }
           
           catch(EOFException e){
    //把这句注释掉
               //e.printStackTrace();
    System.out.println("你丫的我捕获了你吧");
           }catch(IOException e){
               e.printStackTrace();
           }