2014-04-01 169 views
0

這是我收到的錯誤,當我嘗試運行我的代碼下面。我的老師說我們可以在任何地方尋求幫助。我將不勝感激,如果有人可以幫助我這個錯誤java錯誤消息空指針異常

java.lang.NullPointerException 
    at Practise_Assessment.main(Practise_Assessment.java:35) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 

這裏是我的代碼,如果需要的話

import java.text.NumberFormat; 
import java.util.Arrays; 

public class Practise_Assessment { 

    public static String absences(String prompt) {// user input for name and 
    // days absent 
     System.out.println(prompt); 
     java.util.Scanner keyboard = new java.util.Scanner(System.in); 
     return keyboard.nextLine(); 
    } 


    public static void main(String[] args) throws Exception { 

     int numDayEntries ; 
     int numNameEntries; 
     int[] daysArray = null ; 
     String[] nameArray = null ; 

     boolean done = false; 

     while (!done) { 
      System.out.println("enter # to stop"); 
      String absences = absences("enter name of person absent then the amount of days they were absent");// the value of the users input 

      for(numDayEntries =0; numDayEntries < daysArray.length;numDayEntries++){ 
       daysArray = new int[numDayEntries]; 
      } 
      for(numNameEntries = 0; numNameEntries < nameArray.length;numNameEntries++){ 

       nameArray = new String[numNameEntries];  
      } 

      if (absences.equalsIgnoreCase("#")) { 
       done = true;  
      } else { 
       String DaysAbsent =absences.replaceAll("[^0-9]", "") ; 
       int daysAbsent = ((Number) NumberFormat.getInstance().parse(DaysAbsent)).intValue();// converts a string to an int 
       String absentee = absences.replaceAll("\\d", "");// replace all digits in the user input to nothing leaving just the name 

       daysArray[numDayEntries] = daysAbsent; 
       nameArray[numNameEntries] = absentee; 
      } 
     } 
     System.out.println(Arrays.toString(daysArray)); 
    } 
} 
+1

Daysarray變量爲空 – fmodos

+0

感謝大家誰回覆,你們(和女孩)幫助這麼多 – user3023714

+0

@ user3023714然後,你應該接受幫助你解決它的答案。 – Keerthivasan

回答

2

您的for環路計爲daysArray.length,但daysArraynull。此外,您的for循環無論如何都沒有任何意義。你正在創建,然後扔掉很多相同的數組。您的代碼試圖完成的目標很不明確,因爲您要求提供一個單人人的姓名,然後指定一個單號指示缺席的人數。

推薦的方法是:(1)使用一個包含學生姓名和缺勤數量的對象,將這些信息保存在一條記錄中;(2)如果不使用數組,則使用List而不是數組。噸知道你需要多少物品,因爲List是可變大小。

1

daysArray爲null,並且.length從空引用訪問。這是NPE的原因。在使用數組之前,您需要初始化數組。你的for循環根本沒有任何意義。

1

堆棧跟蹤告訴您問題出在Practise_Assessment類的第35行。你需要看那條線。

如果35行是這樣的:

for(numDayEntries =0; numDayEntries < daysArray.length;numDayEntries++){ 

那麼它可能是因爲你沒有初始化daysArray - 你將它設置爲null。

1

問題在您的for循環。你的數組被設置爲NULL。

  1. 在使用前初始化您的數組。

    然後嘗試一下,你會得到你想要的。

1

此行是異常的原因 - for(numDayEntries =0; numDayEntries < daysArray.length;numDayEntries++)

看看你得到的異常 - NULL-PointerException或NPE。它告訴我們一些REFERENCE或TYPE已經被設置爲NULL,也就是說,我們沒有給它分配適當的對象。例如。 Car nfs = null;。我們應該已經完成​​Car nfs = new Car();

現在,錯誤導致行中唯一的對象是daysArray。其他一切都是一個整數。 所以,如果daysArray正確地分配了一個對象,你應該看到你的代碼的其餘部分。也許你忘記了,或者是由於邏輯錯誤而發生的。

囉嗦的方式,但我做到了,因爲你是新的。