希望有人解答这个Java问题

希望有人解答这个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;来记录数组大小值

第一次写问题,有些不熟练,望包涵