我的程序有个错误请大虾指点指点!!
这是个学员管理程序,目前只写了录入,更显示2部分,但问题就出现在显示(红字那里)那里,错误提示是:
(Exception in thread "main" java.lang.NullPointerException
at net.Student.show(Student.java:56)
at net.Test.main(Test.java:13)
)
代码如下:
package net;
import java.util.Scanner;
public class Student {
int id;
String name;
double[] cj=new double[3];
double avg;
Student(){}
Student(int id,String name,double[] cj){
this.id=id;
this.name=name;
for(int i=0;i<cj.length;i++){
this.cj[i]=cj[i];
}
}
public double avg(double[] cj){
double sum=0;
for(int i=0;i<cj.length;i++){
sum=sum+cj[i];
}
return sum/cj.length;
}
//学员信息录入
public void info(Student[] stu){
Scanner input=new Scanner(System.in);
for(int i=0;i<stu.length;i++){
System.out.println("请输入第"+(i+1)+"学员ID:");
int id=input.nextInt();
System.out.println("请输入第"+(i+1)+"学员姓名:");
String name=input.next();
double[] cj=new double[3];
for(int j=0;j<cj.length;j++){
System.out.println("请输入第"+(j+1)+"门课的成绩:");
cj[j]=input.nextDouble();
}
stu[i]=new Student(id,name,cj);
avg=stu[i].avg(cj);
System.out.println("要继续吗:(y/n)");
if(input.next().equals("n")){
break;
}
}
}
//学员信息显示
public void show(Student[] stu){
System.out.println("学员ID"+"\t\t"+"学员姓名"+"\t\t"+"成绩1"+"\t"+"成绩2"+"\t"+"成绩3"+"\t\t"+"平均成绩");
for(int i=0;i<stu.length;i++){
if(stu[i].id !=0){
System.out.println(stu[i].id+"\t\t"+stu[i].name+"\t\t"+stu[i].cj[0]+"\t"+stu[i].cj[1]+"\t"+stu[i].cj[2]+"\t\t"+this.avg);
}else{
break;
}
}
}
}
下面是测试类:
package net;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student[] stu=new Student[49];
Student person=new Student();
person.info(stu);
person.show(stu);
}
}
[解决办法]
当你没有输入49组数据之前,[要继续吗:(y/n)]选n的时候,
后续的Student是空。所以在运行到哪一条的[if(stu[i].id !=0){ ]时候,会出错。
以下的修改供参考:
将[if(stu[i].id !=0){ ]改成[if (stu != null && stu[i].id != 0) {]。
[解决办法]
Student[] stu=new Student[49];
你定义了一个数组但真正实例化的只有输入的几个所以产生了NULLPOINTER异常。
我把你的程序新包装了下。供参考。
student类:
package net;import java.text.DecimalFormat;import java.util.Scanner;public class Student { int id; String name; double[] cj = new double[3]; double avg; Student() { } Student(int id, String name, double[] cj) { this.id = id; this.name = name; for (int i = 0; i < cj.length; i++) { this.cj[i] = cj[i]; } } public void setAvg(double avg){ this.avg=avg; } public String toString(){//重写方法以便于打印出ArrayList中的内容 DecimalFormat format=new DecimalFormat("#.##");//格式化平均值输出 return this.id + "\t\t" + this.name + "\t\t" + this.cj[0] + "\t" + this.cj[1] + "\t" + this.cj[2] + "\t\t" + format.format(this.avg); }}