我被要求建立一个系统,我将有一个菜单与一堆功能,但主要的一点是,它是关于安排doctor 和护士预约.首先,我想,因为我们可能有很多不同的人(生病的正常人,想要预约,doctor 和护士),我应该创建一个"Person"类,并能够创建一组具有一组参数的人.在我go 找它的路上,我发现自己有一个错误,说我的数组是空的,即使用户应该插入信息.

这是我到目前为止在菜单课上学到的东西.我现在正在try 完成的部分只是菜单上的数字1,这意味着添加一个人,我想稍后将其存储在内存中,并对选项2进行编程,即显示存储在内存中的人.

import java.text.BreakIterator;
import java.util.Scanner;
public class Menu {
    Person people[] = new Person[9];
     public Menu(){

     }
    void showMenu(){
        Scanner r = new Scanner(System.in);
        int option;
        System.out.println("==== Managing medical appointments ====");
        System.out.println("1 - Add a person");
        System.out.println("2 - Show people");
        System.out.println("2 - Book an appointment");
        System.out.println("3 - De-select an appointment");
        System.out.println("4 - Show all appointments");
        System.out.println("5 - Show appointments by date");
        System.out.println("6 - Average enquiry time");
        System.out.println("7 - Average time of enquiries by date");
        System.out.println("8 - Save queries");
        System.out.println("9 - Read queries");
        System.out.println("0 - Exit");
        System.out.println("Choose the desired option: ");
        option = r.nextInt();
        switch(option){
            case 1: addPerson();
                break;
            case 2: showPeople();
                break;
        }
    }
    public void showPeople(){
         for (int i =0 ; i< people.length ; i++){
             System.out.println(people[i]);
         }
    }
    public void addPerson() {
        Scanner r = new Scanner(System.in);
        int nId;
        String name = "nothing";
        int nTel;
        System.out.println("Enter ID number: ");
        nId = r.nextInt();
        System.out.println("Enter the person's name: ");
        name = r.nextLine();
        System.out.println("Enter phone number: ");
        nTel = r.nextInt();
        people[0].setPerson(nId,name,nTel);

    }
}

这是我的主要内容.我还有一大堆其他的课程,比如建立,这将延伸到医院或健康中心,预约,等等.在这种情况下,在Main上,我所做的就是创建一个对象的菜单类型,并调用我创建的showMenu函数.

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Menu menu = new Menu();
        menu.showMenu();
    }

}

当我运行我的Main时收到的错误:

==== Medical appointment management ====
1 - Add a person
2 - Show people
2 - Book an appointment
3 - Cancel an appointment
4 - Show all appointments
5 - Show appointments by date
6 - Average appointment time
7 - Average appointment time by date
8 - Save appointments 
9 - Read appointments
0 - Exit
Choose the desired option: 
1
Enter the identification number: 
12313123
Enter the person's name: 
Enter the phone number: 
9712312
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Person.setPerson(int, String, int)" because "this.persons[0]" is null
    at Menu.addPerson(Menu.java:49)
    at Menu.showMenu(Menu.java:27)
    at Main.main(Main.java:6)

Process finished with exit code 1

如你所见,它显示了菜单,我 Select 选项1,这是Add Person,然后他开始询问我在类中包括的参数,但首先,由于某种原因,它直接跳过了名字,然后他给我那个错误,告诉我我的数组为空.

编辑:按照建议翻译了程序,希望它更容易.谢谢!

推荐答案

之所以会出现这个问题,是因为您没有创建Pessoa的新实例.因此,为了修复此问题,请使用以下代码

people[0] = new Person(); //Make sure to pass parameters if they exist
people[0].setPerson(nId,name,nTel);

Avoid using arrays for a program like this可以考虑使用ArrayList

Java相关问答推荐

Javascript在边界中心调整ImageView大小

使用java访问具体子类特定方法的最佳方法是什么?

SpringBoot+Java 17@Valid未验证POJO

查找剩余的枚举

Kotlin内联互操作:强制装箱

将Spring Boot 3.2.0升级到3.2.1后查询执行错误

用OSQL创建索引

搜索列表返回多个频道

使用存储在字符串变量中的路径目录打开.pdf文件

在Ubuntu 23.10上使用mp3创建JavaFX MediaPlayer时出错

Java创建带有扩展通配符的抽象处理器

为什么我不能建立输入/输出流?Java ServerSocket

我的代码是线程安全的吗?[Java、CAS、转账]

无法使用Open WebStart Java 8运行jnlp

H2数据库仅支持%1个结果集?

无法在Java中获取ElastiCache的AWS CloudWatch指标

如何使用Jackson读取以方括号开头的JSON?

如何调查进程列表中不可见的活跃 MySQL 事务?

将在 Docker 中运行的 Spring Boot 连接到在 Docker 中运行的 PostgreSQL,无需 compose 文件?

在对象列表上调用提取后,如何判断没有值为空?