2013-06-29 37 views
-1

我有一個問題我的程序:NullPointerException異常,程序不編譯

public class Muster2 { 
int[] farben; 

構造帶的4個整數

public Muster2(int f0, int f1, int f2, int f3) { 
int[] farben = new int[4]; 
farben[0] = f0; 
farben[1] = f1; 
farben[2] = f2; 
farben[3] = f3; 
} 

數組施放這個數組爲String

public String toString() { 
String result = ""; 
    for (int i=0;i<4;i++) { 
     char convert = (char) farben[i]; 
     result+=convert; 
    } 
return result; 
} 

想法:起初,我想看看兩個陣列在 山姆有什麼相同的整數e位置:例如:[1,2,3,4]和[1,4,5,6]。對於 這兩個數組,counter_weiss應該是= 1,導致只有位置爲0的元素對於兩個數組都是相同的。 因此,counter_weiss統計兩個數組中的完全相同位置 中的元素。 counter_schwarz計算兩個數組中存在的元素,即 ,但在其他位置。所以counter_schwarz也是= 1,對於給定的數組, 原因在第一個我們有4個在第3個位置,在第二個數組我們可以在第二個位置找到 4。

public Bewertung bewerte(Muster versuch) { 
int counter_schwarz = 0; 
int counter_weiss = 0; 

他們在第一

for (int i=0;i<4;i++) { 

我通過陣列

if (this.farben[i] != versuch.farben[i]) { 

運行和檢查,如果我得到了在相同的位置相同的元素爲0

for (int o=i+1;o<4;i++) {  

如果不是,我檢查我是否有我t在另一個位置,但我必須在i + 1開始,否則當我到達數組末尾的索引像i = 3時,我會計數兩次。假設0,3是一個可能的組合,所以第一個數組的第一個元素與第三個數組中的第二個元素具有相同的數字,然後counter_schwarz將從0,3和3,0獲得+1。

if(this.farben[i] == versuch.farben[o]) { 
       counter_schwarz += 1;        
     } 
    } 
} 
else counter_weiss +=1; 
} 

如果在相同位置的元素是相同的,counter_white得+1

Bewertung aktuelleBewertung = new Bewertung (counter_schwarz, counter_weiss); 

return aktuelleBewertung; /* here the counters are used to construct an object, 
which doesn't matter now, this part should work fine */ 
} 

public static void main (String[] args) { 

Muster Muster1 = new Muster (1,2,3,4); 
Muster Muster2 = new Muster (2,3,4,5); 

Bewertung Neu = Muster1.bewerte(Muster2); 

System.out.println(Neu.toString()); 

} 

} 

現在的問題是,我在

if (this.farben[i] != versuch.farben[i]) 

我不想得到一個NullPointerException」不知道爲什麼,有人能幫助我嗎?

感謝

+3

我很困惑:你聲明'我的類的對象的等式方法不起作用',但我沒有在你的代碼中的任何地方看到'equals(...)'方法。 –

+4

你們甚至用德語來表示變量名?! –

+0

無論如何,我當然不明白,我只有一個問題 - 爲什麼不在你的構造函數中傳遞一個數組,而不是4個獨立的整數參數來構造一個數組? –

回答

1

的問題是,在這裏:

public class Muster2 { 
int[] farben; 

這裏:

public Muster2(int f0, int f1, int f2, int f3) { 
int[] farben = new int[4]; 

你聲明兩個完全獨立的兩個變量叫做farben

你填充後者,讓我們超出範圍。前者仍然是null,所以當你嘗試訪問它的元素時你會得到一個NPE。

+0

好吧,我發現了錯誤。它在另一個類中,Bewertung.java的toString()方法不起作用,我會在一個新線程中提出這個問題。感謝你的幫助! :) – rikojir

+0

@rikojir我希望你的意思是你已經發現**另一個**錯誤。由於沒有解決這個錯誤(在這裏的答案)只會導致更多的問題。 – skiwi

0

如果使用「O」爲循環計數器,那麼你不應該增加「我」:

for (int o=i+1;o<4;i++) { 

否則,就很難,如果他們不發佈完整的可執行的例子來追蹤其他民族程序中的錯誤!

您應該學習如何使用調試器(NetBeans或Eclipse使調試非常輕鬆),或者使用很多println()來分析代碼以查看發生了什麼。

+0

一旦你有這個工作,你應該瞭解StringBuffer。避免在字符串上使用+ =,這是該運算符甚至存在的Java中的錯誤。 –

+0

好吧,這確實有幫助,它是數組初始化兩次和循環計數器o – rikojir

+0

@GyroGearless在Java中的字符串連接在一段時間內並不是這樣。編譯器現在將+ =轉換爲對StringBuilder的調用,請參閱此問題的答案:http://stackoverflow.com/questions/4648607/stringbuilder-stringbuffer-vs-operator此外,這僅僅是一個循環,有4個步驟性能不會受到影響,不妨使代碼簡短易讀。 – confusopoly