2014-01-08 40 views
0

所以我的問題只是我得到一個Nullpointerexception當測試創建數組,並不能找出原因:( 它想要更多的文字,所以我正在做的是試圖使甲板卡如u很可能會看到,我使用JUnit測試陣列的創建,但我得到的失敗。我得到一個nullpointerexception請幫助:)

的例外是在IF語句。

public class Deck { 

private int type; 
private int text; 

private String[] texts; 
private String[] types; 
private CardMaster[] deck = new CardMaster[38]; 

public CardMaster[] getDeck() { 
    return deck; 
} 


public void setDeck(CardMaster[] deck) { 
    this.deck = deck; 
} 


public Deck() 
{ 
    for(int i = 0;i<deck.length;i++) 
    { 
     int id; 

     Random Rgen = new Random();  

     id = Rgen.nextInt(deck.length+1); 

     do 
     { 
      if (deck[id].equals(null)) 
      { 
       deck[id] = new CardMaster("test"); 
      } 
     } 
     while(!deck[id].equals(null)); 

    } 
} 
+0

在哪一行?你的堆棧跟蹤在哪裏? – A4L

+0

有些東西需要初始化。'deck [id]'沒有被初始化。默認值是'null'。 – Maroun

+0

你能否改變標題? –

回答

4

嘗試這種情況:

do{ 
    if (deck[id] == null){ 
     deck[id] = new CardMaster("test"); 
    } 
} 
while(deck[id] != null); 

基本上:.equals()是用於比較的對象。使用==比較爲空。

4

改變這一行while(!deck[id].equals(null));while(deck[id]!=null);

另外 改變這種if (deck[id].equals(null))if (deck[id]==null)

+0

我選擇其他評論作爲回答,因爲我認爲這是第一個到達。你的答案都能解決我的問題,所以我也要感謝你的努力。 非常感謝。 – SryImStillNewb

+0

@ user3172787歡迎您。我忙於回答其他問題,我認爲Niko的回答比我的好。如果您有任何其他問題,請隨時詢問。一直準備好幫助 – SpringLearner

1

在語句「deck [i] .equals(null)」中,實際上是在空引用上調用equals()方法。 根據上述答案建議更改檢查。

1

equals()方法用於比較實際值(正在由對象引用變量引用)而非引用。 因爲你正在比較參考變量和null {deck [i] .equals(null)}您正在獲得NPE。 See here for equals method Details

0

equals用於比較兩個對象,null不是任何類的實例,因此您必須用==或!=替換equals。