阵列中的吸气和吸气器

问题描述:

我需要下面我的代码的意外输出帮助。 我创建了一个名为“学生”的类,我称之为“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的默认值:一个空对象。

重访您的构造函数并确定它的放置位置。只要确保在传递方法之前构造对象。