簡體   English   中英

Mooc Fi Loop 混亂

[英]Mooc Fi Loop Confusion

我正在嘗試解決 Mooc.fi 練習 103,即:為觀鳥者設計一個數據庫。 它包含鳥類的名稱和拉丁名稱,以及觀察次數。 我在理解為什么下面的兩個代碼會導致兩個不同的答案時遇到問題。

注釋掉的代碼是我制作的代碼。 一切似乎都很好,直到我輸入名稱:XX。 當我嘗試將該名稱傳遞到觀察中時,它打印出它不是鳥(有時兩次)(盡管它已添加到數組列表中)。 當我嘗試輸入實際名稱時,它運行良好。 我在理解為什么 for 循環中的 else 子句會導致這種情況時遇到問題? 注釋掉的循環上面的 for 循環運行完全正常,但我不確定為什么需要添加一個布爾值來確保它實際上在數組列表中?

觀察到的公共無效(字符串名稱){

    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”運行時,它會打印“它不是鳥!”

正如我猜的那樣(因為您沒有粘貼整個代碼而只是其中的一部分)問題不在於列表是否包含名稱為XX的鳥,而是當列表中的某些給定的鳥未通過時您會做什么if塊中的測試。

讓我們看一下原始的 for 循環代碼:當某只鳥沒有通過測試時,for 循環會做什么? 沒有。 因此,如果 list 包含名稱為[A, B, C]鳥,並且我們將XX傳遞給該方法,那么 for 循環將不執行任何操作。 但它還會跟蹤( birdThere標志)是否有任何鳥被識別為XX 如果不是,則它會打印一條錯誤消息(僅一次)。

現在,讓我們檢查新的實現。 For 循環打印“不是鳥!” 每次當某只鳥沒有通過測試時都會發送消息。 使用我們的測試列表: [A, B, C]XX參數,我們將收到此消息 3 次,因為沒有一只鳥通過測試。 更重要的是,即使某些鳥通過了測試,它也不會停止循環,因此所有無效的鳥都會觸發錯誤消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM