2012-12-26 28 views
0

所以,我一直在思考爲什麼我的代碼沒有整夜工作,並經過多年的搜索沒有治療,我決定在這裏發佈。我上線接收NPE有:nullpointerexception數組

this.numbers[a][b] = new Integer(n[a][b]); 

有了這個是我的全碼:

private int[][] numbers, temp, temp2; 
private int a, b; 

public Matrix(int[][] n) 
{ 
System.out.println(n[0].length); 
int numbers[][] = new int[n[0].length][n[1].length]; 
int temp[][] = new int[n[0].length-1][n[1].length-1]; 
int temp2[][] = new int[n[0].length][n[1].length]; 
    for(a=0;a<n[0].length;a++) 
     for(b=0;b<n[1].length;b++) 
     { 
      this.numbers[a][b] = new Integer(n[a][b]); 
      this.temp2[a][b] = new Integer(n[a][b]); 
     } 
    this.xLength = n[0].length; 
    this.yLength = n[1].length; 
} 

我爲什麼我得到一個錯誤無能;儘管我確信這是一個簡單的錯誤。幫助讚賞。 (n [] []是一個完美的陣列)

+0

我得到了同樣的錯誤[4,1],[7,1] – user1928958

+0

'新的整數(N [A] [B])'就這樣,您的對象立即自動拆箱並丟棄。我不明白你爲什麼這樣做。 –

+0

= new Integer(n [a] [b]);和= n [a] [b];沒有什麼不同。我只是迫不及待地想知道它是否會奏效。 – user1928958

回答

2

numbers是一個在你的方法內定義的數組,不在你有的類內,所以this.numbers指的是你在類中定義的數組無可否認它的值爲null),而不是您在方法中定義的本地數字數組。

+0

在方法的第二行中將'numbers'更改爲'this.numbers'將解決此問題,但我不確定這是否是您的案例的最佳解決方案。您應該考慮'數字'是否是您的方法執行完成後要保持活動的數組。 – Ameen

+0

我想這應該是有用的說,我已經定義他們在我的方法上面的行中;這不是問題,並添加一個this.number使得java語法生氣 – user1928958

0

我注意到了一些東西:在你的構造函數中,你屏蔽了三個實例變量numberstemptemp2。你不需要那樣做。

從每個變量中刪除類型聲明和方括號,並且您的NPE不應該繼續。這主要是因爲numbersnull,您無法將/ index解析爲null。

new Integer(n[a][b]);中也沒什麼意義。如果n[i]numbers[j][k]的類型是int[](也就是原始的int),那麼您不需要做任何自動裝箱;只需直接分配值。

你的循環變量(a,b)需要在它們前面有int,然後才能以你期望的方式工作 - 否則它們不會被聲明。

最後,你正在循環錯誤的尺寸。對於循環長度不同的二維數組,您要對外部循環使用n.length,對內部循環使用n[0].length。所以它會是這樣的:

for (int a = 0; a < n.length; a++) { 
    for (int b = 0; b < n[0].length; b++) { 
     numbers[a][b] = new Integer(n[a][b]); 
     temp2[a][b] = new Integer(n[a][b]); 
    } 
} 
+0

對不起,但什麼是類型聲明?我只是沒有學過很多詞彙,所以我覺得自己很愚蠢。 – user1928958

+0

例如:'int foo = 2;' - 我們知道'foo'已被聲明爲'int'的類型。 – Makoto

+0

啊我看到了,謝謝雖然刪除了這個數字前面的固定我的錯誤:P – user1928958