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循环是不必要的......我对任何理由都不自信。有人可以解释????
答案 0 :(得分:1)
您需要实例化数组,例如:
first = new String[n];
然后才能使用first[i]
。 last
&amp;共
此外,您似乎期望f = kb.next()
正在做某事,但它在您当前的代码中没有做任何事情。