Exception in thread "main" java.lang.NullPointerException: 哪里出了问题(๑•́ ₃ •̀๑)

Exception in thread

问题描述:

import java.util.Scanner;
//定义主类
public class TestStudent {
public static void main (String[] args) {

Student Stu = new Student();
Stu.Input();


}

}

//定义类
class Student {
String[] name;
char[] sex;
float[] math;
float[] daishu;
float[] C;
float[] object;
int n;
public void Input () {
Scanner sc = new Scanner(System.in);
System.out.println("请输入录入学生数量:");
n = sc.nextInt();
for(int i = 1;i<=n;i++) {
System.out.println("请输入第"+i+"组数据");

    System.out.println("请输入第"+i+"组姓名");
    name[i] = sc.nextLine();
    System.out.println("请输入第"+i+"组性别");
    sex[i] = sc.next().charAt(0);
    System.out.println("请输入第"+i+"组高数成绩");
    math[i] = sc.nextFloat();
    System.out.println("请输入第"+i+"组线性代数成绩");
    daishu[i] = sc.nextFloat();
    System.out.println("请输入第"+i+"组C语言成绩");
    C[i] = sc.nextFloat();
    System.out.println("请输入第"+i+"组面向对象成绩");
    object[i] = sc.nextFloat();
    }
}

}

因为你的属性都只创建了类似指针的对象,但是没有分配对应地址
在input接受输入后对应分配空间即可

     Scanner sc = new Scanner(System.in);
        System.out.println("请输入录入学生数量:");
        n = sc.nextInt();
        name = new String[n];
        sex = new char[n];
        math = new float[n];
        daishu = new float[n];
        C = new float[n];
        object = new float[n];

定义字段的时候出问题了吧,你没有给定长度,像这种最好一个学生对应一个对象

类型定义就不准确,我来改一下

import java.util.Arrays;


import java.util.Scanner;



public class TestStudent {

    public static void main(String[] args) {

 
        Input();

    }
    //方法
    public static void Input() {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入录入学生数量:");
        int n = sc.nextInt();
        Student []sarr=new Student[n+1];
        for(int i =0;i<n;i++) {
            
            System.out.println("请输入第"+(i+1)+"组姓名");
           String name = sc.next();
            System.out.println("请输入第"+(i+1)+"组性别");

            String sex = sc.next();

            System.out.println("请输入第"+(i+1)+"组高数成绩");

            float math = sc.nextFloat();

            System.out.println("请输入第"+(i+1)+"组线性代数成绩");

            float daishu = sc.nextFloat();

            System.out.println("请输入第"+(i+1)+"组C语言成绩");

            float c = sc.nextFloat();

            System.out.println("请输入第"+(i+1)+"组面向对象成绩");

            float object = sc.nextFloat();
            sarr[i]=new Student(name, sex,  math,  daishu,  c, object);
            
            
           
        }
        //打印学生
         System.out.println(Arrays.toString(sarr));
    }
 

}

 

// 定义类

class Student {

    String name;//姓名
    String sex;//性别
    float math;//数学
    float daishu;//代数
    float c;//c语言
    float object;//面向对象
    public Student(String name, String sex, float math, float daishu, float c, float object) {
        super();
        this.name = name;
        this.sex = sex;
        this.math = math;
        this.daishu = daishu;
        this.c = c;
        this.object = object;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", sex=" + sex + ", math=" + math + ", daishu=" + daishu + ", c=" + c
                + ", object=" + object + "]";
    }
    
}

问题:
1、参数没有实际化。
2、循环初始值应该为0,并且循环条件小于n,否则会导致数组越界。
如有帮助,点击我回答右上角【采纳】按钮。
代码修改如下:

import java.util.Scanner;
//定义主类
public class TestStudent {
public static void main (String[] args) {
Student Stu = new Student();
Stu.Input();
}
}
//定义类
class Student {
String[] name;
char[] sex;
float[] math;
float[] daishu;
float[] C;
float[] object;
int n;
public void Input () {
Scanner sc = new Scanner(System.in);
System.out.println("请输入录入学生数量:");
n = sc.nextInt();
name = new String[n];
sex = new char[n];
math = new float[n];
daishu = new float[n];
C = new float[n];
object = new float[n];
for(int i =0;i<n;i++) {
System.out.println("请输入第"+i+"组数据");
    System.out.println("请输入第"+i+"组姓名");
    name[i] = sc.nextLine();
    System.out.println("请输入第"+i+"组性别");
    sex[i] = sc.next().charAt(0);
    System.out.println("请输入第"+i+"组高数成绩");
    math[i] = sc.nextFloat();
    System.out.println("请输入第"+i+"组线性代数成绩");
    daishu[i] = sc.nextFloat();
    System.out.println("请输入第"+i+"组C语言成绩");
    C[i] = sc.nextFloat();
    System.out.println("请输入第"+i+"组面向对象成绩");
    object[i] = sc.nextFloat();
    }
}
}