2013-03-31 47 views
0

該方法是記錄玩家在完成一個洞時所用的杆數。當筆畫成功記錄時,該方法返回true。有兩個注意事項:(1)孔必須按順序記錄,並且必須從1開始。如果接收到的孔不合格,則不記錄分數並返回錯誤(2)孔編號也必須有效。您不能記錄小於1或大於課程孔數的孔的分數。在調試我的代碼時,給出一個java.lang.NullPointerException。這是什麼意思,我該如何解決這個問題。記錄高爾夫球杆的方法

注:holesPlayed是分配的0

這裏的值的實例變量是我:

public boolean recordStrokes(int holeNumber, int strokes) { 
    if ((holeNumber >= 1) && 
     (holeNumber <= this.holesPlayed) && 
     (holeNumber == holesPlayed + 1 
    { 
     scores[holeNumber -1] = strokes;  
     holesPlayed = holesPlayed + 1;  
     return true; 
    }  
    else { 
     return false; 
    } 
} 
+0

NullPointerException意味着(除別的以外),你試圖訪問你還沒有初始化的變量的值。 – jedwards

+1

我在代碼中更改了某些縮進以使其更清晰,但是看起來您的if語句在條件上存在語法錯誤 - 是否可以仔細檢查您是否正確複製了它? – jedwards

+0

另外,如果'holeNumber'必須是1或者更大,並且'this.holesPlayed'被初始化爲0,那麼這種方法返回'true'是不是不可能?在我看來,你需要刪除你的第二個「如果」條件。 –

回答

0

你已經錯過了右括號的IF條件

public boolean recordStrokes(int holeNumber, int strokes) { 
     if ((holeNumber >= 1) && 
      (holeNumber <= this.holesPlayed) && 
      (holeNumber == holesPlayed + 1)) <-- this brackets are missing in your code 
     { 
      scores[holeNumber -1] = strokes;  
      holesPlayed = holesPlayed + 1;  
      return true; 
     }  
     else 
     { 
      return false; 
     } 
    } 
+2

我同意這是一個問題,但它會導致編譯時語法錯誤,而不是運行時NPE。看起來好像只是將代碼複製到SO時出現錯字。 – jedwards

0

我不能確定,但​​我會猜測scores從未初始化。你是否在某處用一條線初始化它,如

scores = new int[NUM_HOLES]; 

+0

謝謝,我有一個實例變量:private int []分數。我改變了這個:scores = new int [Course.NUM_OF_HOLES] to:this.scores = new int [Course.NUM_OF_HOLES]。我想我正在創建一個新對象,而不是將值分配給我的實例變量 –

+0

這是否解決了您的問題? –