我有一个包含病人姓名和紧急级别的类,实现了可比较的:
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=要添加到arraylist中的新患者,1=更新紧急级别(示例30+30=60)。2=按降序和名称打印紧急级别。**
然而,我的程序成功地扫描并向arraylist中添加了新的病人,但每当需要更新紧急级别时,序列都是错误的。
例如,在david紧急级别更新之前,序列是(david 60,david 30),但是在david紧急级别更新之后,由于david首先到达,因此正确的序列应该是(david 60,May60)。
不幸的是,我没有正确更新序列。下面是我的主要程序:
UpdateEmergencyLVL:
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。对于compare方法,由于到达索引比共享相同的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方法,这只是为了让您知道应该在什么时候传递索引。你对台词有一点评论。
问题内容: 我正在使用JSONObject来删除JSON字符串中不需要的certin属性: 它可以正常工作,但是问题是JSONObject是“名称/值对的无序集合”,我想保持String在通过JSONObject操作之前的原始顺序。 任何想法如何做到这一点? 问题答案: 你不能 这就是为什么我们称其 为名称/值对的无序集合 。 我不确定为什么需要这样做。但是,如果要订购,则必须使用json数组。
我有一个ArrayList,里面有一堆MyObject对象。我想在我的对象中保留一个整数字段,它是ArrayList中这个对象的键,这样我就可以很容易地得到这个元素在ArrayList中的位置。 当我从这个ArrayList中删除一个对象时,会出现问题,因为索引会向左移动。避免这个问题的最佳方法是什么? 我应该不删除元素,而是用null覆盖它们(这样索引就不会移位),还是应该在删除一次之后遍历Ar
Navicat 为维护 MongoDB 对象提供完整的解决方案。 在主窗口的导航窗格中或对象选项卡中选择对象。 右击已选择的对象。 选择“维护”,然后从弹出式菜单中选择一个维护选项。 结果显示在弹出的窗口中。 数据库 选项 描述 修复数据库 通过放弃无效或损坏的数据来重新生成数据库和索引。 集合 选项 描述 压缩集合 对集合中的所有数据和索引进行重写和碎片整理。 验证集合 通过扫描集合的数据和索引
Navicat 为维护 SQLite 对象提供完整的解决方案。 在主窗口的导航窗格中或对象选项卡中选择对象。 右击已选择的对象。 选择“维护”,然后从弹出式菜单中选择一个维护选项。 结果显示在弹出的窗口中。 数据库 选项 描述 分析数据库 收集有关数据库的统计数据。 真空数据库 重新生成数据库文件。它只适用于 main 数据库。 重新生成数据库索引 删除并重新生成数据库内的所有索引。 表 选项 描
Navicat 为维护 SQL Server 对象提供完整的解决方案。 在主窗口的导航窗格中或对象选项卡中选择对象。 右击已选择的对象。 选择“维护”,然后从弹出式菜单中选择一个维护选项。 结果显示在弹出的窗口中。 数据库 选项 描述 读写 将数据库设置为读写模式。 只读 将数据库设置为只读模式。 在线 使数据库在线。 离线 使数据库离线。 紧急 将数据库设置为紧急状态。 多个用户 将数据库设置为
Navicat 为维护 PostgreSQL 对象提供完整的解决方案。 在主窗口的导航窗格中或对象选项卡中选择对象。 右击已选择的对象。 选择“维护”,然后从弹出式菜单中选择一个维护选项。 结果显示在弹出的窗口中。 数据库 选项 描述 允许 用户可以连接到数据库。 不允许 没有用户可以连接到数据库。 分析数据库 收集关于数据库的统计数据。 真空数据库 垃圾收集并根据需要分析数据库。 重新生成数据库