簡體   English   中英

使用 Iterator 迭代 ArrayList,其中 while 條件搜索 .contains() 並失敗

[英]Iterating over ArrayList with Iterator where while condition searches for .contains() and fails

這不應該是火箭科學,但出於某種原因,我的 while-condition 仍然是錯誤的。 我創建了一個空的ArrayList並填充它。 但是,當我迭代它時,它似乎失敗了。 我錯過了什么?

ArrayList<String> names = new ArrayList<>();
    
for(int i = 0; i < 10; i++) {
   names.add("Name " + i);
}
    
Iterator<String> it = names.iterator();
while(it.hasNext() && it.next().contains("Name 5")) {
    System.out.println("Found my desired name.");
}

在 Netbeans 中按原樣執行附加代碼。

您的問題的正確代碼片段是

        List<String> names = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            names.add("Name " + i);
        }

        Iterator<String> it = names.iterator();
        while (it.hasNext()) {
            String item = it.next();
            if (item.contains("Name 5")) {
                System.out.println("Found my desired name.");
                break;//remove if you don't want to exit
            }
        }

您的代碼的問題是 while 循環。

while(it.hasNext() && it.next().contains("Name 5")) {

這基本上意味着當迭代器有一個值並且下一個值(在這種情況下將是第一個元素)包含 Name 5 時,繼續運行。 問題在於,第一項將是“Name 0”而不是“Name 5”。 “名稱 0”不包含名稱 5。

那么發生的情況是,while 循環運行的條件將為假,並且循環不會運行。

對於第一次迭代, it.next()返回列表的第一個元素,即Name 0 ,因此它永遠不會進入while循環。

您應該以這種方式修復代碼:

Iterator<String> it = names.iterator();
while(it.hasNext()) {
    if (it.next().contains("Name 5")) {
        System.out.println("Found my desired name.");
        break; // exit while loop
    }
}

while循環將循環直到您的條件不成立。 在您的示例中,它是true && false - 將停止循環

暫無
暫無

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

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