2014-04-01 139 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正确地分配了一个对象,你应该看到你的代码的其余部分。也许你忘记了,或者是由于逻辑错误而发生的。

啰嗦的方式,但我做到了,因为你是新的。