2012-10-16 43 views
0

該程序符合但不會成功運行,我無法找到該錯誤。Java教程,該程序包含一個錯誤,但我找不到它

public class Q1 { 
    public static void main(String[] args) { 
     StringBuffer[]stringBuffers = new StringBuffer[10]; 

     for(int i =0; i< stringBuffers.length;i++){ 
      stringBuffers[i].append("StringBuffer at index " + i); 
     } 
    } 
} 
+1

NullPointerException ...太平凡了,在程序完成時嘗試讀取堆棧跟蹤 –

+0

如果您可以使用StringBuilder,請不要使用StringBuffer。 http://vanillajava.blogspot.co.uk/2012/08/java-memes-which-refuse-to-die.html –

回答

6

您不初始化您的stringbuffers

你應該有類似

for(int i =0; i< stringBuffers.length;i++){ 
    stringBuffers[i] = new StringBuffer(); 

for(int i =0; i< stringBuffers.length;i++){ 
    stringBuffers[i] = new StringBuffer("StringBuffer at index " + i); 
+0

爲什麼我突然間,一個月後,得到我的第一個這個答案downvote?我有沒有生氣? –

1

您需要用所需的字符串初始化數組中的StringBuffer對象: -

for(int i =0; i< stringBuffers.length;i++){ 
    stringBuffers[i] = new StringBuffer("StringBuffer at index " + i); 

} 
2

您需要初始化StringBuffer:

public class Q1 { 
public static void main(String[] args) { 
    StringBuffer[]stringBuffers = new StringBuffer[10]; 

    for(int i =0; i< stringBuffers.length;i++){ 
     stringBuffers[i]= new StringBuffer(); 
     stringBuffers[i].append("StringBuffer at index " + i); 
    } 
} 
} 
1

在聲明中:

StringBuffer[]stringBuffers = new StringBuffer[10]; 

剛纔創建10個元素的數組。但是你沒有放入任何元素。該數組中的每個元素仍然是空的,默認情況下,包含null

所以當你叫

stringBuffers[i].append("StringBuffer at index " + i); 

這裏stringBuffers[i]仍然是未初始化的並且指向null

所以它給java.lang.NullPointerException.

在其他的答案說,如果你這樣做:

for(int i =0; i< stringBuffers.length;i++){ 
    stringBuffers[i] = new StringBuffer(); 

這將StringBuffer的陣列與參考的每個元素初始化爲一個StringBuffer對象所以stringBuffer [i]現在不是空的。


順便說一句你應該使用StringBuilder。 StringBuffer和StringBuilder都提供可變字符串。僅當您的應用程序在多線程環境中運行時才使用StringBuffer因爲它引入了性能開銷

相關問題