Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用迭代器在ArrayList上迭代,其中while条件搜索.contains()并失败_Java_Iterator - Fatal编程技术网

Java 使用迭代器在ArrayList上迭代,其中while条件搜索.contains()并失败

Java 使用迭代器在ArrayList上迭代,其中while条件搜索.contains()并失败,java,iterator,Java,Iterator,这不应该是火箭病,但由于某种原因,我的情况仍然是假的。我创建一个空的ArrayList,然后填充它。然而,当我迭代它时,它似乎失败了。我错过了什么 ArrayList<String> names = new ArrayList<>(); for(int i = 0; i < 10; i++) { names.add("Name " + i); } Iterator<String> it = names.ite

这不应该是火箭病,但由于某种原因,我的情况仍然是假的。我创建一个空的
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.");
}
ArrayList name=new ArrayList();
对于(int i=0;i<10;i++){
名称。添加(“名称”+i);
}
Iterator it=names.Iterator();
而(it.hasNext()&&it.next()包含(“名称5”)){
System.out.println(“找到我想要的名字”);
}

按照Netbeans中的方式执行附加的代码。

对于第一次迭代,
it.next()
返回列表的第一个元素,即
Name 0
,因此它不会在
循环时进入

您应该通过以下方式修复代码:

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
    }
}
Iterator it=names.Iterator();
while(it.hasNext()){
if(it.next()包含(“名称5”)){
System.out.println(“找到我想要的名字”);
break;//在循环时退出
}
}

while
循环将循环,直到您的情况不正确。
在您的示例中,它是
true&&false
-将停止循环

针对您的问题的正确代码段是

        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
            }
        }
List name=new ArrayList();
对于(int i=0;i<10;i++){
名称。添加(“名称”+i);
}
Iterator it=names.Iterator();
while(it.hasNext()){
String item=it.next();
如果(项目包含(“名称5”)){
System.out.println(“找到我想要的名字”);
break;//如果不想退出,请删除
}
}
代码的问题是while循环

while(it.hasNext()&&it.next()包含(“名称5”){

这基本上意味着,当迭代器有一个值并且下一个值(在本例中是第一个元素)包含名称5时,请继续运行。问题是,第一个项将是“名称0”而不是“名称5”。“名称0”不包含名称5


因此,while循环运行的条件将为false,循环将不会运行。

仔细想想。您从列表中获取第一个值,并将其与
“Name 5”
进行比较。如果第一个值不是
“Name 5”
,循环会做什么?@Rogue它将转到下一项,因为我调用了
。next()
method。仅当条件的计算结果为
true
而您的计算结果不是,对吧……非常明显。无需中断循环。该列表包含10个元素only@YegorSaliev是的,但正确的解决方案是退出循环,这样列表大小就无关紧要了