我需要以下代码中的意外输出帮助。 我创建了一个名为“Student”的类和我称为“MainStudent”的mainclass,当我尝试将Student对象设置为Array并使用setter输入数据时,我没有错误的代码,但是当我运行我的代码时输出就是喜欢这个:
线程“main”中的异常java.lang.NullPointerException
我正在使用NetBeans编写我的java代码。
import javax.swing.JOptionPane;
public class MainStudent {
public static void main(String[] args) {
String a,b;
int c;
Student[] std = new Student[3];
for(int i=0; i<std.length; i++){
a = JOptionPane.showInputDialog("Enter Student Name");
b = JOptionPane.showInputDialog("Enter Student Address");
c = Integer.parseInt(JOptionPane.showInputDialog("Enter Student Phone Number"));
std[i].setName(a);
std[i].setAddress(b);
std[i].setPhone_number(c);
}
for(int i=0; i<std.length; i++){
System.out.println(std[i].getName());
}
}
}
答案 0 :(得分:3)
您需要使用Students实例化您的数组。
在循环的顶部,添加:
std[i] = new Student();
该行:
Student[] std = new Student[3];
只创建一个数据结构,只能容纳三个学生。数组中的索引实际上并不包含任何内容,实际上包含null,这就是获取空指针的原因。你说&#34;结构标准,给我索引i&#34;中的东西,它会立即递给你一个空值,因为你从来没有把任何东西放到索引i中。
答案 1 :(得分:1)
初始化数组只会创建一个具有给定大小的null
数组 - 您仍然需要单独初始化每个元素。 E.g:
Student[] std = new Student[3];
for(int i=0; i<std.length; i++){
a = JOptionPane.showInputDialog("Enter Student Name");
b = JOptionPane.showInputDialog("Enter Student Address");
c = Integer.parseInt(JOptionPane.showInputDialog("Enter Student Phone Number"));
std[i] = new Student(); // Create the object first
std[i].setName(a);
std[i].setAddress(b);
std[i].setPhone_number(c);
}
答案 2 :(得分:0)
我建议您使用列表代替数组:
List<Student> std = new ArrayList<Student>();
for(int i=0; i<std.length; i++){
Student _tmpStudent = new Student();
a = JOptionPane.showInputDialog("Enter Student Name");
b = JOptionPane.showInputDialog("Enter Student Address");
c = Integer.parseInt(JOptionPane.showInputDialog("Enter Student Phone Number"));
_tmpStudent.setName(a);
_tmpStudent.setAddress(b);
_tmpStudent.setPhone_number(c);
std.add(_tmpStudent);
}
如果您遇到错误,因为std [i]对象不存在,请将std[i] = new Student()
放在for之后。
答案 3 :(得分:0)
假设代码对于您的所有Student类都是正确的,您只需要为包含对话框的for循环的每次迭代初始化一个student对象。
插入
std[i] = new Student();
因为你的for循环中的第一行可能会解决你的问题,因为它会创建一个可以设置其值的学生对象。在不初始化Student对象的情况下,setX()尝试设置std的默认值:空对象。
重温您的构造函数并确定将其放置在何处。只需确保在向对象传递方法之前构造对象。