ArrayList、for 循环和 if 语句的问题 - 为列表中的每个项目打印行

Posted

技术标签:

【中文标题】ArrayList、for 循环和 if 语句的问题 - 为列表中的每个项目打印行【英文标题】:Problems with ArrayList, for loop and if statement - prints line for each item in the list 【发布时间】:2017-05-22 04:52:20 【问题描述】:

在编程方面,我是一个完全的初学者,希望能得到一些帮助。我的程序有一个由用户输入的具有不同属性(例如名称和年龄)的狗对象的 ArrayList (dogRegister)。

该程序应该能够更新狗的年龄并从列表中删除狗,等等。要求用户输入要删除的狗的名字,如果输入的名字在列表中,则删除该狗。如果该名称未包含在列表中,则程序将打印“未找到狗”。年龄命令也是如此,如果包含名字,狗会变大 1 岁。如果不是 - “找不到狗”。

我正在为 if 语句及其条件而苦苦挣扎。我的代码和策略不起作用,因为它会为列表中的每个项目打印“未找到”,直到找到正确的项目。我只希望它打印一次,并且只告诉是否找到了该项目。关于如何解决它的任何想法?

如果您需要查看我的更多代码,请告诉我。

 public void deleteDog()
    System.out.print("Enter name of dog to delete: ");
    String nameOfDogToDelete = readString(); //returns the nextLine();

    for (Dog dl : dogRegister) 
        if (dl.getName().contains(nameOfDogToDelete)) 
            dogRegister.remove(dl); 
            System.out.println("Dog deleted.");
        
        else if (!dl.getName().contains(nameOfDogToDelete)) 
            System.out.println("Dog not found.");
        
    


public void editAge()
    System.out.print("Enter name of aging dog: "); 
    String nameOfAgingDog = readString(); //returns the nextLine();

        for (Dog a : dogRegister) 
            if (a.getName().contains(nameOfAgingDog)) 
                a.updateAge(); //method returning the dog's age++
                System.out.println("Dog's age updated.");
            
            else if (!a.getName().contains(nameOfAgingDog)) 
                System.out.println("Dog not found.");
            
        
    

【问题讨论】:

【参考方案1】:

两个建议:

    删除条目后立即跳出循环,这样就不会检查进一步的迭代。

    如果在此之前您不想打印“未找到”案例,请不要包含“未找到”案例的打印。检查整个列表,如果仍然没有找到该条目,则打印“未找到”。您可以使用布尔变量来跟踪这一点。

您已经检查了 if 条件,并且通过再次通过相同的检查再次检查 else 条件。所以当找到要删除的狗的名字时,它会删除它,并继续检查循环中的其他迭代。因此,一旦您找到要删除的狗并删除它,就跳出循环。

public void deleteDog()
    System.out.print("Enter name of dog to delete: ");
    String nameOfDogToDelete = readString(); //returns the nextLine();
    boolean isFound = false; //To keep track of whether the dog is found or not
    for (Dog dl : dogRegister) 
        if (dl.getName().contains(nameOfDogToDelete)) 
            dogRegister.remove(dl); 
            System.out.println("Dog deleted.");
            isFound = true;
            break;//Break out of the loop as soon as you find it
        
        // else //no need to check the negation of the above condition again
        //   System.out.println("Dog not found.");
        // 
    
    if (!isFound)
         System.out.println("Dog not found.");

【讨论】:

耐心点,伙计.. 轻松投反对票.. 我正在输入解释,正如你评论的那样 我撤回了我的反对票,但这仍然无法按 OP 的预期工作,例如考虑如果 nameOfDogToDelete 不是列表中的第一只狗会发生什么... 更新说明 @MarkRotteveel:最新更新。抱歉,这里的网速不好。 您可能希望将 if(!isFound) 移出循环。【参考方案2】:

循环时只检查是否找到狗并将找到的布尔字段标记为真。如果没有找到,当循环结束时,打印没有找到

 public void deleteDog()
    System.out.print("Enter name of dog to delete: ");
    String nameOfDogToDelete = readString(); //returns the nextLine();
    boolean found =false;

    for (Dog dl : dogRegister) 
        if (dl.getName().contains(nameOfDogToDelete)) 
            dogRegister.remove(dl); 
            System.out.println("Dog deleted.");
            found =true;
            break;
        
    
    if(!found)
     System.out.println("Dog not found.");
    

【讨论】:

您可能希望在该代码之外包含一些解释。 已添加,代码中有什么不懂的可以随时问。 我不是操作者,我理解你的代码很好,但没有解释的代码通常没有真正的帮助。 是的,你是对的。请检查代码是否适合您:) 感谢您的快速响应,我的代码现在可以使用了! :)

以上是关于ArrayList、for 循环和 if 语句的问题 - 为列表中的每个项目打印行的主要内容,如果未能解决你的问题,请参考以下文章

如何用Python for循环语句,if语句 计算1-2+3-4+5......-99

if条件和for循环语句whiledo..whileswitch语法

java使用foreach语句遍历二维数组如何实现?

Python基础语法—— 条件语句(if)+循环语句(for+while)

如何在 if 语句和 for 循环之外获取数组

Linux | shell脚本-条件判断if和循环语句for