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是的,但正确的解决方案是退出循环,这样列表大小就无关紧要了