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

时间:2017-01-07 14:21:52

标签: java if-statement for-loop arraylist contains

在编程方面,我是一个完全的初学者,并希望得到一些帮助。我的程序有一个狗对象的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.");
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

两个建议:

  1. 删除条目后立即中断循环,以便不再检查进一步的迭代。

  2. 如果您不希望在此之前打印“未找到”的情况,请不要包含“未找到”案例的打印件。检查整个列表,然后如果仍未找到该条目,则打印“未找到”。您可以使用布尔变量来跟踪此情况。

  3. 您已检查过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.");
    }
    

答案 1 :(得分:1)

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

Debug.Trace.trace