我是Java初学者。我有以下循环结构:
loop1:
for(int j=0; j<a.size(); j++){
if(a.get(j).equals(10)){
System.out.println(a.get(j));
} else {
do {
System.out.println(a.get(j));
} while(a.get(j).equals(20));
break loop1;
}
}
这是我想要做的事情的一个基本结构。所以我想在else
部分的do while
循环得到满足时退出for
循环(do-while循环执行一次,不管提到的条件如何,我当时不想退出循环,但我想在实际满足条件时退出循环)。我该怎么做?我尝试按代码中所示进行中断,但它在通过do-while
循环的第一次迭代后停止。我哪里错了?
我想打印ArrayList a
中从10到20的值…并且10可以在列表中的任何位置,而不是开头。
Eg. ArrayList a contains {1,2,3,4,5,6,7,8,9,10,11,12,13...20}
I want to print values in the ArrayList from values 10 to 20 (including 10 and 20).
列表中没有重复的元素。因此,列表中只有一个10和一个20,并且总是按递增顺序排列。
int i=0;
boolean found10,found20;
found10=false;
found20=false;
while(i<a.size&&(!found20))
{
if(a.get(i)==10)
found10 = true;
if(found10)
System.out.println(a.get(i));
if(a.get(i)==20)
found20 = true;
i++;
}
执行您想要的操作的常用方法是通过标志:
boolean printing = false;
for (int n : a) {
if (n == 10) printing = true;
if (printing) System.out.println(n);
if (n == 20) break;
}
如果你坚持使用嵌套循环,你的解决方案非常接近,你只错过了内循环中的一个关键i++
,当然它的条件是相反的。此外,你不是在打破一个内部循环,你是在打破外部循环;所以你不需要标签。
for (int i = 0; i < a.size(); a++) {
if (a.get(i).equals(10)) {
do {
System.out.println(n);
i++;
} while (! a.get(i).equals(20));
break;
}
}
此外,还要小心角落里的案子。如果10出现但20没有出现,会发生什么?如果20出现在10之前会发生什么?如果有多个10或20,会发生什么?例如,我的第二个代码片段可能会因为其中一些而崩溃(因为i++没有检查数组大小)。一旦你知道了角落案例应该如何表现,你就应该相应地修改这些片段。
我想你在那里放了一些错误的逻辑。如果a.get(j).equals(10)
不是true
,那么for
循环将在j
的第一次迭代中中断,或者由于j
的值永远不会改变,您将最终进入无限循环。
根据您的声明
I want to print the values in the ArrayList a starting from 10 until 20...and 10 can be anywhere in the list and not the beginning
您可以使用以下代码:
for(int j=0; j<a.size(); j++){
int number = Integer.parseInt(a.get(j).toString());
if(number>=10 && number<=20){
System.out.println(number);
}
}
根据此注释:
我想打印ArrayList a中从10开始到20…和10可以在列表中的任何位置,而不是开始的
解释为数组列表在列表的某个地方包含10,可能在列表的下一个地方包含20,并且应该打印第一个10和第一个20之间的所有数字:
j = 0;
while (j < a.size() && a.get(j) != 10) j++;
if (j < a.size()) do {
print (a.get(j)); j++;
} while (j < a.size() && a.get(j) != 20);
其他人都修复了您的循环。
要回答标题中的问题,脱离复杂循环的最简单方法是将复杂循环放入方法中,并使用return语句。
以您的代码为例,
public void someMethod(List<Object> a) {
for (int j = 0; j < a.size(); j++) {
if (a.get(j).equals(10)) {
System.out.println(a.get(j));
} else {
do {
System.out.println(a.get(j));
} while (a.get(j).equals(20));
return;
}
}
}