【问题标题】:Cannot invoke "Student.setName(String)" because "s[i]" is null-Object to be instantiated for each array element [duplicate]尝试访问对象数组中的对象 - 无法调用 \"Student.setName(String)\" 因为 \"s[i]\" 为空
【发布时间】:2023-01-12 11:54:51
【问题描述】:

我正在尝试从一个简单程序中的对象数组访问一个对象。几个小时以来,我一直在摸不着头脑。

当我尝试使用其索引值从对象数组中调用该对象时,输出是错误的。

问题:我试图从三个学生那里获取详细信息并将它们存储在 objects 中。 学生s[]=新学生[2]; 但是当我尝试访问 s[i].getName() 时出现错误。它说 s[i] 为空。您可以看到如下所示的输出。

在 do-while 循环中获取三个学生的详细信息,直到 q!=1 作为条件。

这是我的模型类:

public class Student {

    private String name;
    private String id;
    private int phoneNumber;



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(int phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}

这是我的主要

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Student s[]=new Student[2]; //I want to use an array of objects like this.

        Scanner name=new Scanner(System.in);
        Scanner ID=new Scanner(System.in);
        Scanner phoneNumber=new Scanner(System.in);


           int q=1;


                do{
               int i=0;


          System.out.println("Enter Name");

          String nameInput=name.nextLine();
          s[i].setName(nameInput);

          System.out.println("Enter ID");

          String IDInput=ID.nextLine();
          s[i].setName(IDInput);
          System.out.println("Enter Phone Number");

          int phoneNumberInput=phoneNumber.nextInt();

          s[i].setPhoneNumber(phoneNumberInput);
                i++;
                      } while(q!=1);



        System.out.println("Name:" +s[0].getName());
        System.out.println("Name:" +s[1].getName());
        System.out.println("Name:" +s[2].getName());

        System.out.println("ID:" +s[0].getId());
        System.out.println("ID:" +s[1].getId());
        System.out.println("ID:" +s[2].getId());

        System.out.println("Phone:" +s[0].getPhoneNumber());
        System.out.println("Phone:" +s[1].getPhoneNumber());
        System.out.println("Phone:" +s[2].getPhoneNumber());
     }


    }

输出:

Enter Name
John
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Student.setName(String)" because "s[i]" is null
    at Main.main(Main.java:28)

【问题讨论】:

    标签: java arrays arraylist


    【解决方案1】:

    您创建了一个空数组。您需要为每个元素创建一个新的学生对象。

    String nameInput=name.nextLine();
    s[i] = new Student();
    s[i].setName(nameInput);
    

    【讨论】:

    • 是的,正确,尽管问题仍然存在。现在可能是因为 do while 循环。我正在尝试
    猜你喜欢
    • 2017-11-02
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多