2012-11-06 43 views
0

我有这段代码的问题:2维表和NullPointerException异常

PointerCoords[][]srodki = new PointerCoords[n2][]; 

for(int i = 0; i < n2; i++) 
{ 
     srodki[i] = new PointerCoords[n2]; 
} 

for(int i = 0; i < n2; i++) 
{ 
     for(int j = 0; j < n2; j++) 
     { 
       srodki[i][j].y = r + j*k; 
       srodki[i][j].x = r + i*k; 
     } 

} 

为什么我得到一个NullPointerException?

回答

4

的问题是,你没有执行插入之前初始化的 srodki[i][j]内容:所以首先

srodki[i][j].y = r + j*k; 
srodki[i][j].x = r + i*k; 

,你需要执行:

srodki[i][j] = new PointerCoords(); 

然后应该没问题。

1

在你的代码中,你不需要初始化数组中的对象。 最初,所有的数组元素是null除非你明确地初始化它们是这样的:

for(int i = 0; i < n2; i++) 
    { 
      for(int j = 0; j < n2; j++) 
      { 
        // your constructor goes here 
        srodki[i][j] = new PointerCoords(); 
        srodki[i][j].y = r + j*k; 
        srodki[i][j].x = r + i*k; 
      } 

    } 
0

一旦你初始化您的数组,它包含空值的N2 * N2矩阵。

为了真正能够设置在阵列内PointerCoords对象的属性,你必须首先做

array[i][j] = new PointerCoords(); 
1

因为你没有初始化引用

0

做,以避免空指针的正确方法是

PointerCoords[][]srodki = new PointerCoords[n2][]; 

    for(int i = 0; i < n2; i++) 
    { 
      srodki[i] = new PointerCoords[n2]; 
    } 

    for(int i = 0; i < n2; i++) 
    { 
      for(int j = 0; j < n2; j++) 
      { 
        srodki[i][j]= new PointerCoords(); // added line 
        srodki[i][j].y = r + j*k; 
        srodki[i][j].x = r + i*k; 
      } 

    } 
+1

用'i'指数 – Mik378

+0

冗余环路我刚才已经更正了空指针异常,而不是整体的逻辑 –

1

初始化您的数组如下:

PointerCoords[][] srodki = new PointerCoords[n2][n2]; 
for (int i = 0; i < n2; i++) { 
    srodki[i] = new PointerCoords[n2]; 
    for (int j = 0; j < n2; j++) { 
     srodki[i][j] = new PointerCoords(); 
    } 
}