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