Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java对象数组_Java_Arrays_Object - Fatal编程技术网

Java对象数组

Java对象数组,java,arrays,object,Java,Arrays,Object,我试图创建一个对象数组,我在一个名为Patient的类中有一个计数器(totalNum) 问题是,每当我添加信息时,前一个数组中的信息都会消失,所有数组都会接受新信息的值。有没有关于如何解决此问题的建议 p、 s(计数器的增量在此构造函数中) hospitalPatient[Patient.totalNum]=新患者(ispnMain、姓名、年龄、血型) 这是我的代码:代码在一个while循环中,因此用户将输入一个选项,然后它将询问此信息 for (int j = 0; j < 100;

我试图创建一个对象数组,我在一个名为Patient的类中有一个计数器(totalNum)

问题是,每当我添加信息时,前一个数组中的信息都会消失,所有数组都会接受新信息的值。有没有关于如何解决此问题的建议

p、 s(计数器的增量在此构造函数中) hospitalPatient[Patient.totalNum]=新患者(ispnMain、姓名、年龄、血型)

这是我的代码:代码在一个while循环中,因此用户将输入一个选项,然后它将询问此信息

 for (int j = 0; j < 100; j++) {
   hospitalPatient[j] = new Patient();
 }

 while(choice != 7) {
   switch (choice) {
     case 1:
       System.out.println ("Please Enter the patient's ISPN:" );
       String ispnMain = read.next();
       System.out.println ("Please Enter the patient's name:" );
       String name = read.next();
       System.out.println ("Please Enter the patient's Age:" );
       int age = read.nextInt();
       System.out.println ("Please Enter the patient's Blood Type:" );
       String bloodTypeMain = read.next();


       hospitalPatient[Patient.totalNum] = new Patient(ispnMain , name ,age ,bloodTypeMain);

       hospitalPatient[Patient.totalNum].SetISPN(ispnMain);
       hospitalPatient[Patient.totalNum].SetName(name);
       hospitalPatient[Patient.totalNum].SetAge(age);
       hospitalPatient[Patient.totalNum].SetBloodType(bloodTypeMain);

       hospitalPatient[Patient.totalNum].getISPN();
       hospitalPatient[Patient.totalNum].getName();
       hospitalPatient[Patient.totalNum].getAge();
       hospitalPatient[Patient.totalNum].getBloodType();

    // other cases here
    }
}
for(int j=0;j<100;j++){
医院病人[j]=新病人();
}
while(选项!=7){
开关(选择){
案例1:
System.out.println(“请输入患者的ISPN:”);
字符串ispnMain=read.next();
System.out.println(“请输入患者姓名:”);
字符串名称=read.next();
System.out.println(“请输入患者的年龄:”;
int age=read.nextInt();
System.out.println(“请输入患者的血型:”;
字符串bloodTypeMain=read.next();
hospitalPatient[Patient.totalNum]=新患者(ispnMain、姓名、年龄、血型);
hospitalPatient[Patient.totalNum].SetISPN(ispnMain);
hospitalPatient[Patient.totalNum].SetName(name);
hospitalPatient[Patient.totalNum].SetAge(年龄);
hospitalPatient[Patient.totalNum].SetBloodType(bloodTypeMain);
hospitalPatient[Patient.totalNum].getISPN();
hospitalPatient[Patient.totalNum].getName();
hospitalPatient[Patient.totalNum].getAge();
hospitalPatient[Patient.totalNum].getBloodType();
//这里还有其他案例
}
}

您可以切换到
ArrayList
,只需调用
add(new Patient())
。您将避免所有索引和数组大小不正确的问题

患者构造器中一定有问题。您确定每次再次调用静态totalNum时,递增的变量确实在递增,并且没有被覆盖吗

反正

您应该a)为此使用ArrayList,b)动态添加它。对于内存来说,其他一切都是超负荷的

ArrayList<Patient> hospitalPatients = new ArrayList<>();


 while(choice != 7) {
 switch (choice) {
 case 1 :
 System.out.println ("Please Enter the patient's ISPN:" );
 String ispnMain = read.next();
 System.out.println ("Please Enter the patient's name:" );
 String name = read.next();
 System.out.println ("Please Enter the patient's Age:" );
 int age = read.nextInt();
 System.out.println ("Please Enter the patient's Blood Type:" );
 String bloodTypeMain = read.next();



Patient patient = new Patient(ispnMain , name ,age ,bloodTypeMain);
patient.SetISPN(ispnMain);
patient.SetName(name);
.... and so on.

hospitalPatients.add(patient);
}

您不想在患者构造器中使用计数器。由于您在开始时在循环中创建所有患者对象,因此计数器将增加100倍,并且不再增加。您应该将计数器移到输入循环


由于似乎可以在输入循环中输入100多个患者(直到用户告诉它退出为止),因此您可能需要使用arraylist。这将允许您输入所需数量。它也不需要计数器。

我想我第一眼就想不明白这个问题。有没有办法等待其他人对此发表评论

您是否增加了构造函数中的totalNum?您能否解释一下为什么同时执行hospitalPatient[j]=new Patient();和hospitalPatient[Patient.totalNum]在同一个循环中?这些行不是:
hospitalPatient[Patient.totalNum].SetISPN(ispnMain);hospitalPatient[Patient.totalNum].SetName(name);hospitalPatient[Patient.totalNum].SetAge(年龄);hospitalPatient[Patient.totalNum].SetBloodType(bloodTypeMain)此构造函数的部分:
hospitalPatient[Patient.totalNum]=新患者(ispnMain、姓名、年龄、血型main)?你没有告诉我们你在哪里增加
totalNum
,你为什么要隐藏它?demostene:是的,我确定它在增加是的,我确定计数器在增加,因为我以前打印过,而且还可以。j只用于初始化患者数组。
 for(Patient patient  : hospitalPatients) {
     patient.get(....);
 }