Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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:检索具有唯一ID的ArrayList的信息时,只打印添加到其中的最后一个元素的信息_Java_Arraylist - Fatal编程技术网

Java:检索具有唯一ID的ArrayList的信息时,只打印添加到其中的最后一个元素的信息

Java:检索具有唯一ID的ArrayList的信息时,只打印添加到其中的最后一个元素的信息,java,arraylist,Java,Arraylist,首先,我会告诉你我的问题是什么,下面是代码: 当我运行Class1时,我可以注册我的第一个对象,它有一个唯一的ID。然后我注册我的第二个对象,它也有一个唯一的ID。然后我尝试通过询问第一个对象的ID来检索我的第一个对象信息。现在的问题是,当我请求添加到ArrayList的第一个对象时,总会打印出以下内容:ID错误。无法检索对象信息。但是,当我尝试检索第二个对象(即最后添加到ArrayList的对象)时,它将按照我的需要打印信息 我的问题是,为什么我只能访问添加到ArrayList的最后一个对象,

首先,我会告诉你我的问题是什么,下面是代码:

当我运行Class1时,我可以注册我的第一个对象,它有一个唯一的ID。然后我注册我的第二个对象,它也有一个唯一的ID。然后我尝试通过询问第一个对象的ID来检索我的第一个对象信息。现在的问题是,当我请求添加到ArrayList的第一个对象时,总会打印出以下内容:ID错误。无法检索对象信息。但是,当我尝试检索第二个对象(即最后添加到ArrayList的对象)时,它将按照我的需要打印信息

我的问题是,为什么我只能访问添加到ArrayList的最后一个对象,以及如何使用其唯一ID打印第一个对象信息

下面是第1类:

下面是第2类:

谢谢。

请注意for循环:

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.");
   }