数组中的Getter和Setter

时间:2014-11-05 18:32:58

标签: java nullpointerexception

我需要以下代码中的意外输出帮助。 我创建了一个名为“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());
        }
    }

}

4 个答案:

答案 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的默认值:空对象。

重温您的构造函数并确定将其放置在何处。只需确保在向对象传递方法之前构造对象。