gpt4 book ai didi

Java如何在值更新时维护数组列表中扫描对象的顺序

转载 作者:行者123 更新时间:2023-12-02 03:05:02 26 4
gpt4 key购买 nike

我有一个包含患者姓名和紧急级别的类,该类实现了类似的功能:

class Patient implements Comparable<Patient>{
private String name;
private int emergencyLvl;

public Patient(String name, int emergencyLvl)
{
this.name = name;
this.emergencyLvl = emergencyLvl;

}

public String getName(){
return this.name;

}
public int getEmergencyLvl(){
return this.emergencyLvl;

}
public void setEmergencyLvl(int updateLvl){
this.emergencyLvl = updateLvl;

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

}
public int compareTo(Patient p){

int compareEmergency = ((Patient) p).getEmergencyLvl();

return compareEmergency - this.emergencyLvl;

**//I believe my error comes from here**




}
}

**可以说这是我的输入文件:

3
0 david 30
0 may 60
1 david 30
2

*3 = 查询数量,0 = 要添加到数组列表中的新患者,1 = 更新紧急级别(示例 30 + 30 = 60)。 2 = 按降序打印紧急级别和名称。**

但是,我的程序设法正确扫描新患者并将其添加到数组列表中,但每当需要更新紧急级别时,顺序都是错误的。

例如,在大卫紧急级别更新之前。顺序是(5月60日,大卫30)但更新大卫紧急级别后,由于大卫先到达,因此正确的顺序应该是(大卫 60,5 月 60)。

不幸的是,我未能正确更新序列。这是我的主程序:

更新紧急级别:

void UpdateEmergencyLvl(String patientName, int incEmergencyLvl) {

for(Patient p: a1){
if(p.getName().equals(patientName)){
int newEmergencyLvl = p.getEmergencyLvl() +
incEmergencyLvl;
p.setEmergencyLvl(newEmergencyLvl);

}

}

Collections.sort(a1);

}

最佳答案

首先,您需要为 Patient 类添加一个新属性,您的新公共(public) Patient 应如下所示:

public Patient(String name, int emergencyLvl, int patIndx)
{
this.name = name;
this.emergencyLvl = emergencyLvl;
this.patIndx = patIndx;

}

完成此操作后,为索引创建一个 getter;在您的阅读方法中,您可以只向该索引添加一个 int 。对于比较方法,由于到达索引比共享相同的 EmergencyLvl 更重要,我会这样做:

public int compareTo(Patient p){

int compareEmergency = ((Patient) p).getEmergencyLvl();

int aux= compareEmergency - this.emergencyLvl;

int compareIndex= ((Patient) p).getIndex();
if(compareIndex>this.patIndx) aux=compareIndex-this.patIndx;
return aux;



}

使用的扫描仪:

 void run() throws Exception {


BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
int numCMD = Integer.parseInt(br.readLine()); // note that numCMD is >= N
int index=0;//starting index at 0
while (numCMD-- > 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
index++;
int command = Integer.parseInt(st.nextToken());
switch (command) {
case 0: ArriveAtHospital(st.nextToken(), Integer.parseInt(st.nextToken()));
// you will need a index setter for this, assuming this is the moment when you add the patient to the patient list:
ArriveAtHospìtalOrder(index);//as I cant see how the method ArriveAtHospital works, I showed you a possible method that takes the index.
break;
case 1: UpdateEmergencyLvl(st.nextToken(), Integer.parseInt(st.nextToken())); break;

case 3: pr.println(Query()); break;
}


}
pr.close();

这是一种可能的方法,ArriveAtHospitalIndex 只是为了说明,因为我不知道如何将参数传递给 ArriveAtHospital 方法,这只是为了让您知道何时应该传递索引。您对台词有一点评论。

关于Java如何在值更新时维护数组列表中扫描对象的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41871731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com