2015-06-08 81 views
-1

我有Mappa类和MappaFermi子类,其数组属性为Sector扇区,数组中的每个单元都应该有一个名称,在类构造函数的代码中, t有任何问题给它们命名(所有的测试都是成功的),但是在试图运行NotNull断言的子类构造函数中,我得到了ArrayIndexOutOfBoundsException:14。我将数组设置为受保护的,所以我可以在子类中使用它。Java为数组单元格赋值

public class Mappa { 
    private Name mappaName; 
    protected Sector [][] sector; 
    private int Matrix [][]; 
    private static final int X=23; 
    private static final int Y=14; 
    public Mappa (Name mappaName){ 
     this.mappaName=mappaName; 
     sector = new Settore[X][Y]; 
     for (int i=0; i < X; i++){ 
      for (int j=0; j<Y; j++) { 
       sector[i][j] = new Settore (i,j); 
      } 
     } 
     Matrix = new int[23][14]; 
     if(mappaName==Name.FERMI){ 
      sector[10][8]=new Alieni(10,8); 
      sector[10][9]=new Umani(10,9); 
     } 
     if(mappaName==Name.GALILEI||mappaName==Name.GALVANI){ 
      sector[10][5]=new Alieni(10,5);//i have run all tests and it was successful 
      sector[10][7]=new Umani(10,7); 
     } 
    } 
} 
public class MappaFermi extends Mappa { 
    public MappaFermi() { 
     super(null); 
     new Mappa(Name.FERMI); 
     setMatrix(new int[][]{ 
         {0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,0,0,2,1,2,1,2,0,0,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,0,0,1,2,2,2,1,0,0,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,0,0,3,0,1,0,3,0,0,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,0,2,1,0,1,0,2,1,0,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,1,1,1,0,0,0,1,2,1,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,2,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,0,2,1,0,1,0,2,1,0,0,0,0,0,0,0,0}, 
         {0,0,0,0,0,0,0,0,0,0,2,0,1,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}}); 
     for (int i=0; i < 14; i++){ 
      for (int j=0; j<23; j++){ 
       if (getMatrix()[i][j]==1){ 
        sector[i][j]=new Sicuro(i,j);//this is where i get the error, if i only write `new Sicuro(i,j);` it runs successfully but i'm not storing the value in the cell of the array 
       } 
       else { 
        if (getMatrix()[i][j]==2){ 
         sector[i][j]=new Pericoloso(i,j); 
        } 
        else { 
         if (getMatrix()[i][j]==3){ 
          sector[i][j]=new Scialuppa(i,j); 
         } 
        } 
       } 
      } 
     } 
     } 


    } 
public class MappaFermiTest { 

    @Test 
    public void testMappaFermi() { 
     Mappa mappa = new MappaFermi(); 
     assertNotNull(mappa); 
    } 

} 

回答

0

部门有尺寸[23][14]但你试图用迭代[i in (0..14)]``[j in (0..23)]进行初始化。您应该像这样初始化它:sector = new Settore[Y][X];或反X和Y值。

+0

谢谢,我反过来的价值,因此它的工作。我能问你一件事吗?当我写新的Mappa(Name.FERMI);在MappaFermi()中它不应该将mappaName设置为Name.FERMI?因为当我编写测试来获取mappaName时,它返回null,与扇区相同[8] [10] =新Alieni(8,10)它返回null而不是Alieni – mpz

0

逆向以下循环语句

for (int i=0; i < 14; i++){ 
      for (int j=0; j<23; j++){ 

for (int i=0; i < 23; i++){ 
      for (int j=0; j<14; j++){ 

,数组部门的尺寸为[23][14];23 Rows and 14 Columns。所以这就是为什么你需要分别遍历所有行和他们的列