2015-01-10 68 views
0

我正在嘗試編寫一個程序,讓用戶將其類的大小輸入到數組中,然後查找所有類的平均值。如何解決NullPointerException錯誤

當我運行程序時,它打印出我輸入到數組中的東西,但它給了我一個NullPointerException

代碼:

public void getinput() { // 
    String dog="dog"; 
    boolean done=true; 
    int x=0; 
    int avg=0; 
    int z=0; 
    Scanner scan = new Scanner(System.in); 
    String [] cs = new String [100]; 
    while(done){ 
     System.out.println("Enter the size of one class. When you are done, enter 'quit'");//ask for class sizes 
     dog=scan.nextLine(); 
     cs[x]=dog; 
     x++; 
      if(dog.equalsIgnoreCase("Quit")){ 
       done=false; 

    } 
} 

for(z=0;z<cs.length;z++) { 
    if (!(cs[z].equalsIgnoreCase("quit"))&& !(cs[z]==null)){ 
     System.out.print(cs[z]+", "); 
    } 
} 
for(z=0;z<cs.length;z++) { 
    if (!(cs[z].equalsIgnoreCase("quit"))&& !(cs[z]==null)){ 
     avg=Integer.parseInt(cs[z])+avg; 
     System.out.println(""); 
     System.out.println("The average number of students in each classroom is "+avg); 
     } 
} 
+0

基本上,你需要學習如何調試。首先,看看異常堆棧跟蹤(你**應該在這裏轉載)來找出異常發生的位置。然後檢查該點處的值以查看哪些值可能爲空。如果不明顯,則使用調試器或插入打印語句來找出提供該語句的「可疑」變量的值。然後將問題變量追溯到它(或應該已經)設置的位置,並找出它爲什麼是假的。 –

+0

我已經鏈接到有詳細解答的答疑。 (提示...我的回答。) –

+0

@HotLicks感謝您的建議,但我真的不知道這是什麼:(我剛開始學習java在八月,但感謝您的建議! – odeng

回答

0

如果cs[z]可以爲空,你應該交換的條件的順序,因爲cs[z].equalsIgnoreCase("quit")會拋出NullPointerExceptioncs[z]爲空:

if (cs[z]!=null && !(cs[z].equalsIgnoreCase("quit"))) 
+0

非常感謝!它現在可以工作:,) – odeng

1

另一種簡單的解決方法是反轉該條件首先使用字符串,因爲equalsIgnoreCase已經認爲可能性爲零:

if ("quit".equalsIgnoreCase(cs[z])){ 

這樣你就會知道這部分代碼不會拋出NullPointerException。