Exception in thread "main" java.lang.NullPointerException: 哪里出了问题(๑•́ ₃ •̀๑)
问题描述:
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();
}
}
}