Java:检索具有唯一ID的ArrayList的信息时,只打印添加到其中的最后一个元素的信息
首先,我会告诉你我的问题是什么,下面是代码: 当我运行Class1时,我可以注册我的第一个对象,它有一个唯一的ID。然后我注册我的第二个对象,它也有一个唯一的ID。然后我尝试通过询问第一个对象的ID来检索我的第一个对象信息。现在的问题是,当我请求添加到ArrayList的第一个对象时,总会打印出以下内容:ID错误。无法检索对象信息。但是,当我尝试检索第二个对象(即最后添加到ArrayList的对象)时,它将按照我的需要打印信息 我的问题是,为什么我只能访问添加到ArrayList的最后一个对象,以及如何使用其唯一ID打印第一个对象信息 下面是第1类: 下面是第2类: 谢谢。请注意for循环:Java:检索具有唯一ID的ArrayList的信息时,只打印添加到其中的最后一个元素的信息,java,arraylist,Java,Arraylist,首先,我会告诉你我的问题是什么,下面是代码: 当我运行Class1时,我可以注册我的第一个对象,它有一个唯一的ID。然后我注册我的第二个对象,它也有一个唯一的ID。然后我尝试通过询问第一个对象的ID来检索我的第一个对象信息。现在的问题是,当我请求添加到ArrayList的第一个对象时,总会打印出以下内容:ID错误。无法检索对象信息。但是,当我尝试检索第二个对象(即最后添加到ArrayList的对象)时,它将按照我的需要打印信息 我的问题是,为什么我只能访问添加到ArrayList的最后一个对象,
for(Employee employee: employees){
if(inputNewID.equals(employee.getID())){
System.out.println("ID: " + employee.ID + END_OF_LINE + "Name: " + employee.name + END_OF_LINE + "Salary: " + employee.grossSalary);
} else {
System.out.println("The ID is wrong. You can't retrieve the objects information.");
}
}
它将为雇员列表中的每个对象打印,无论它是否等于inputNewID,我想它的目的是打印一次
您可以使用布尔标志获取所需的行为:
boolean isEmployeeFound = false;
for(Employee employee: employees){
if(inputNewID.equals(employee.getID())){
isEmployeeFound = true;
System.out.println("ID: " + employee.ID + END_OF_LINE + "Name:"+employee.name + END_OF_LINE + "Salary: " + employee.grossSalary);
}
}
if(!isEmployeeFound){System.out.println("The ID is wrong. You can't retrieve the objects information.");}
正如其他人提到的,在createObject函数中去掉class2=新的class2行。您有这行
class2 = new Class2();
在createObject方法中。但是第2类是你拥有员工列表的地方。因此,每次调用createObject时,您都会清除旧的ArrayList
我认为您可以去掉这一行。问题在于类2的for循环中的if/else,或者更具体地说是else。在循环的第一个元素上,将触发else,给出消息。处理此问题的一种方法是添加一个布尔值来检查是否找到ID,并在循环后将else块更改为if检查,如下所示:
boolean idFound = false;
for(Employee employee: employees){
if(inputNewID.equals(employee.getID())){
idFound = true;
System.out.println("ID: " + employee.ID + END_OF_LINE + "Name: " + employee.name + END_OF_LINE + "Salary: " + employee.grossSalary);
}
}
if(! idFound) {
System.out.println("The ID: " + inputNewID + " is not found. You can't retrieve the objects information.");
}
但是if语句不检查每个对象的ID是否相等吗?我可能想错了。你知道我应该把它改成什么吗?if和else语句在一个循环中,因此列表中的每个元素都会触发其中一个语句。如果ArrayList中可能有多个对象,那就不好了。。。但是,在另一个bug修复之前,这是不可能发生的。当我在createObject中同时修复了class2=新的class2行和此修复时,它似乎起到了作用。感谢您的注意。我删除了它,但它仍然说我无法检索对象信息。它实际上是在告诉你它无法检索之前打印信息,对吗?那是因为其他人在回答中提到的bug。谢谢,但显然它仍然不起作用。作为补充,我不认为有什么特别的理由让Class2扩展Class2。是的,你是对的。我只是这么做了,因为我仍将使用这两个类并添加更多代码
boolean isEmployeeFound = false;
for(Employee employee: employees){
if(inputNewID.equals(employee.getID())){
isEmployeeFound = true;
System.out.println("ID: " + employee.ID + END_OF_LINE + "Name:"+employee.name + END_OF_LINE + "Salary: " + employee.grossSalary);
}
}
if(!isEmployeeFound){System.out.println("The ID is wrong. You can't retrieve the objects information.");}
class2 = new Class2();
boolean idFound = false;
for(Employee employee: employees){
if(inputNewID.equals(employee.getID())){
idFound = true;
System.out.println("ID: " + employee.ID + END_OF_LINE + "Name: " + employee.name + END_OF_LINE + "Salary: " + employee.grossSalary);
}
}
if(! idFound) {
System.out.println("The ID: " + inputNewID + " is not found. You can't retrieve the objects information.");
}