导致此异常的原因是什么?循环的构造函数是否不必要?

时间:2014-04-20 08:16:27

标签: java

     import java.util.*;
        public class UserInput {
            public static void main(String[]args){
                Scanner input = new Scanner(System.in);
                System.out.println("How many students are in your class?");
                Student.n= input.nextInt();
                ArrayList<Student> manyStudents = new ArrayList<Student>();
                for(int i=0; i<Student.n; i++){
                    manyStudents.add(new Student(null, null, null, null, 0));
                }

            }
        }

此main方法调用公共类Student创建许多对象实例,其中包括学生的名字姓氏HKID SID和考试成绩,并将每个对象实例存储在另一个被视为manyStudents的数组中。问题涉及解释后半部分所示的运行时收到的编译错误。

        import java.util.*;
        public class Student {
            public static String []  first;
            public static String [] last;
            public static String [] HKID;
            public static String[] SID;
            public static int []Exam;
            public static int n;


            public Student (String f, String l, String h, String s, int e){
                Scanner kb= new Scanner(System.in);
                for(int i=0;i<n;i++){
                    System.out.println("First name:");
                    first[i]=f= kb.next();
                    System.out.println("Last name:");
                    last[i]=l=kb.next();
                    System.out.println("HKID:");
                    HKID[i]=h=kb.next();
                    System.out.println("SID:");
                    SID[i]=s=kb.next();
                    System.out.println("Final exam score:");
                    Exam[i]=e=kb.nextInt();
                }
            }

            public String[] getFirst(){return first;}
            public String [] getLast(){return last;}
            public String [] getHKID(){return HKID;}
            public String [] getSID(){return SID;}
            public int [] getExam(){return Exam;}
            public void setFirst(String [] f){f=first;}
            public void setLast(String [] l){l=last;}
            public void setHKID(String [] h){h=HKID;}
            public void setSID(String [] s){s= SID;}
            public void setExam(int [] e){e=Exam;}
        }

在运行时我收到第一个名字后收到错误。错误如下:

Exception in thread "main" java.lang.NullPointerException
        at Student.<init>(Student.java:15)
        at UserInput.main(UserInput.java:9)

&#34; i&#34;在学生构造函数中干扰变量分配给每个对象实例。代码似乎对我来说具有逻辑意义,因此我不确定运行时出错的原因。也许构造函数中的for循环是不必要的......我对任何理由都不自信。有人可以解释????

1 个答案:

答案 0 :(得分:1)

您需要实例化数组,例如:

first = new String[n];

然后才能使用first[i]last&amp;共

此外,您似乎期望f = kb.next()正在做某事,但它在您当前的代码中没有做任何事情。