阵列中的吸气和吸气器
问题描述:
我需要下面我的代码的意外输出帮助。 我创建了一个名为“学生”的类,我称之为“MainStudent”,我没有错误的代码,当我尝试将Student对象传递给Array并使用setter输入数据时,但是当我运行我的代码时,输出是说,像这样的:在线程 “主要” 显示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());
}
}
}
答
你需要实例化你的数组与学生。
在你的循环顶部添加:
std[i] = new Student();
行:
Student[] std = new Student[3];
只有创建一个数据结构,能够准确地拿着三名学生。数组中的索引实际上并不包含任何内容,并且实际上包含null,这就是为什么你要得到一个空指针。你说“结构std,让我在索引我”,它立即给你一个空值,因为你从来没有把任何东西放入索引我。
答
初始化数组只是创建了一个具有给定大小的null
的数组 - 您仍然需要单独初始化每个元素。例如: -
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);
}
答
我建议你使用列表,而不是数组:
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);
}
在你的情况,你得到错误,因为性病[I]对象不存在,把std[i] = new Student()
为后。
答
假设代码对于所有学生类都是正确的,您只需为包含对话框的for循环的每个迭代初始化一个学生对象。
插入
std[i] = new Student();
为第一生产线在你的循环可能会解决您的问题,因为它会创建一个学生对象,其值可以设置。在没有初始化Student对象的情况下,setX()会尝试设置std的默认值:一个空对象。
重访您的构造函数并确定它的放置位置。只要确保在传递方法之前构造对象。