我正在做作业,我卡在了一个问题上。我是 java 的新手。你能帮助我吗?

I am doing my homework and I stuck in one question. I am new to java. can you help me?

问题是:

创建一个 class 具有属性名称、年龄和性别的人。创建一个人员数组以容纳 10 个人员实例。显示数组中person实例上存储的信息。

我不确定问题是什么,但我试过了,错误是这样的:

线程“主”中的异常java.lang.NullPointerException 在 instance.main(instance.java:29)

这是我的代码:

import java.util.Scanner;
class person{
    String name= new String();
    int age;
    String gender= new String();
    void setInfo(String Name, int Age, String Gender){
        name= Name;
        age=Age;
        gender=Gender;
    }
    void showInfo(){
        System.out.println(name+" "+ age+" "+gender);
    }
}

public class instance {
    public static void main(String[] args) { 
        Scanner sc= new Scanner(System.in);
        String name= new String();
        int age;
        String gender= new String();
        person obj[]= new person[10];
       
        System.out.println("Enter Name age and gender of 10 persons");
        for(int i=0; i<obj.length; i++)
        { 
            name=sc.nextLine();
            age=sc.nextInt();
            gender=sc.nextLine();
            obj[i].setInfo(name, age, gender);
            
        }
        for(int i=0; i<obj.length; i++){
        obj[i].showInfo();
        }
    }
}

您需要在数组中实例化class。

for (int i = 0; i < obj.length; i++) {
    name = sc.nextLine();
    age = sc.nextInt();
    gender = sc.nextLine();

    //see section below
    obj[i] = new person();
    
    obj[i].setInfo(name, age, gender);
}
    static class person {
            String name= new String();
            int age;
            String gender= new String();

            // Constructor
            person(String Name, int Age, String Gender) {
                this.name = Name;
                this.age = Age;
                this.gender = Gender;
            }
    
            void setInfo(String Name, int Age, String Gender){
                name= Name;
                age=Age;
                gender=Gender;
            }
            void showInfo(){
                System.out.println(name+" "+ age+" "+gender);
            }
        }

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String name = new String();
        int age;
        String gender = new String();
        person[] obj = new person[10];

        for (int i = 0; i < obj.length; i++) {
            name = sc.next();
            age = sc.nextInt();
            gender = sc.next();
            //Initialize a new person object and assign its values and the add it to the array.
            person personObj = new person(name, age, gender); // This is where a constructor is used.
            obj[i] = personObj;
        }
        for (int i = 0; i < obj.length; i++) {
            obj[i].showInfo();
        }
    }

我试过你的代码,发现了问题。

问题在于,无论何时创建 class 对象,都必须创建一个构造函数来更新该 class 中的任何变量值。如果您在同一个 class 中创建的 class 和将在 main 方法中使用,则将 class 设为静态。

在使用 Scanner 读取输入时,您使用了 sc.nextLine();,这导致 InputMisMatchException。所以,只需使用 sc.next();