Mooc Fi Loop混乱

时间:2019-01-23 21:43:00

标签: java

我正在尝试解决Mooc.fi练习103,该练习是:为观鸟者设计一个数据库。它包含鸟类的名称和拉丁名称,以及观察到的次数。我在理解以下两个代码为何会导致两个不同答案的过程中遇到问题。

注释掉的代码是我编写的代码。在我输入名称XX之前,一切似乎都工作正常。当我尝试将该名称传递给观察值时,它打印出它不是鸟(有时是两次)(尽管它已添加到arraylist中)。当我尝试输入实际名称时,它运行良好。我在理解为什么for循环中的else子句会导致该问题时遇到问题?上面注释掉的for循环运行得很好,但是我不确定为什么您需要添加一个布尔值以确保它确实在arraylist上?

观察到公共无效(字符串名称){

    boolean birdThere = false; 
    for(Bird bird: this.list) {
        if(bird.getName().equals(name) || bird.getLatinName().equals(name)) {
            bird.addObservation();
            birdThere = true;
        }
    }

    if(!birdThere) {
        System.out.println("Is not a bird!");
    }

    /* //WHY ISN'T THIS WORKING RIGHT???
    for(Bird bird: this.list) {
        if(bird.getName().equals(name) || bird.getLatinName().equals(name)) {
            bird.addObservation();
        } else {
            System.out.println("Is not a bird!");
          }
     }
     */
}

当注释掉的for循环以名称“ XX”运行时,它打印“这不是鸟!”

1 个答案:

答案 0 :(得分:1)

我猜(因为您没有粘贴完整的代码,只是其中的一部分),问题不在于列表是否包含或不包含名称为XX的鸟,而是当给定某只鸟时的操作列表中的鸟没有通过if区块的测试。

让我们看一下原始的for循环代码:当某些鸟没有通过测试时,for循环会做什么?没有。因此,如果list包含名称为[A, B, C]的鸟,并且我们将XX传递给该方法,则for循环将无效。但如果任何鸟已被识别为birdThere,它也会跟踪(XX标志)。如果不是,则打印一条错误消息(仅一次)。

现在,让我们检查一下新的实现。 For循环打印“不是鸟!”每当有一只鸟没有通过测试时,都会显示一条消息。使用我们的测试列表:[A, B, C]XX参数,由于没有一只鸟通过测试,我们将获得3次此消息。而且,即使有些鸟通过了测试,也不会停止循环,因此所有无效的鸟都会触发错误消息。