希望有人解答这个Java问题
问题描述:
代码要求是线性表输入学生成绩信息
import java.util.Scanner;
class Student {
String[] Name;
char[] Sex;
float[] Hmath;
float[] Lmath;
float[] C;
float[] Object;
int len = C.length;
public void Creat() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入录入学生信息的数量:");
int m = sc.nextInt();
Name = new String[m];
Sex = new char[m];
Hmath = new float[m];
Lmath = new float[m];
C = new float[m];
Object = new float[m];
for(int i=0;i<m;i++)
{
System.out.println("请输入第"+i+"组数据");
Name[i] = sc.nextLine();
Sex[i] = sc.next().charAt(0);
Hmath[i] = sc.nextFloat();
Lmath[i] = sc.nextFloat();
C[i] = sc.nextFloat();
Object[i] = sc.nextFloat();
}
}
public void Print() {
for(int i=0;i<len;i++)
{
System.out.println("第"+i+"组");
System.out.println(Name[i]+",");
System.out.println(Sex[i]+",");
System.out.println(Hmath[i]+",");
System.out.println(Lmath[i]+",");
System.out.println(C[i]+",");
System.out.println(Object[i]+",");
}
}
public void Put() {
float Sum1=0,Ave1=0;
float Sum2=0,Ave2=0;
float Sum3=0,Ave3=0;
float Sum4=0,Ave4=0;
for(int i=0;i<len;i++)
Sum1+=Hmath[i];
for(int i=0;i<len;i++)
Sum2+=Lmath[i];
for(int i=0;i<len;i++)
Sum3+=C[i];
for(int i=0;i<len;i++)
Sum4+=Object[i];
Ave1=Sum1/len;
Ave2=Sum2/len;
Ave3=Sum3/len;
Ave4=Sum4/len;
System.out.println("高等数学平均成绩为"+Ave1);
System.out.println("线性代数平均成绩为"+Ave2);
System.out.println("C语言平均成绩为"+Ave3);
System.out.println("面对对象平均成绩为"+Ave4);
}
}
public class TestStudent {
public static void main(String[] args) {
Student Stu = new Student();
Stu.Creat();
Stu.Put();
Stu.Print();
}
}
...
这个代码不知道为什么运行出现下面的错误
```bash
Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "this.C" is null
at Student.<init>(Student.java:9)
at TestStudent.main(TestStudent.java:3)
答
int len = C.length;
这行代码有异常。
import java.util.Scanner;
class Student {
String[] Name;
char[] Sex;
float[] Hmath;
float[] Lmath;
float[] C;
float[] Object;
int len =0;
public void Creat() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入录入学生信息的数量:");
int m = sc.nextInt();
len=m;
Name = new String[m];
Sex = new char[m];
Hmath = new float[m];
Lmath = new float[m];
C = new float[m];
Object = new float[m];
for(int i=0;i<m;i++)
{
System.out.println("请输入第"+i+"组数据");
Name[i] = sc.nextLine();
Sex[i] = sc.next().charAt(0);
Hmath[i] = sc.nextFloat();
Lmath[i] = sc.nextFloat();
C[i] = sc.nextFloat();
Object[i] = sc.nextFloat();
}
}
public void Print() {
for(int i=0;i<len;i++)
{
System.out.println("第"+i+"组");
System.out.println(Name[i]+",");
System.out.println(Sex[i]+",");
System.out.println(Hmath[i]+",");
System.out.println(Lmath[i]+",");
System.out.println(C[i]+",");
System.out.println(Object[i]+",");
}
}
public void Put() {
float Sum1=0,Ave1=0;
float Sum2=0,Ave2=0;
float Sum3=0,Ave3=0;
float Sum4=0,Ave4=0;
for(int i=0;i<len;i++)
Sum1+=Hmath[i];
for(int i=0;i<len;i++)
Sum2+=Lmath[i];
for(int i=0;i<len;i++)
Sum3+=C[i];
for(int i=0;i<len;i++)
Sum4+=Object[i];
Ave1=Sum1/len;
Ave2=Sum2/len;
Ave3=Sum3/len;
Ave4=Sum4/len;
System.out.println("高等数学平均成绩为"+Ave1);
System.out.println("线性代数平均成绩为"+Ave2);
System.out.println("C语言平均成绩为"+Ave3);
System.out.println("面对对象平均成绩为"+Ave4);
}
}
public class TestStudent {
public static void main(String[] args) {
Student Stu = new Student();
Stu.Creat();
Stu.Put();
Stu.Print();
}
}
答
len = 0;在这个地方因为C数组还没有new实例,所以还不能进行C的方法访问。
在C = new float[m];后,可以 len = m;来记录数组大小值
答
第一次写问题,有些不熟练,望包涵