我是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;
}
}
这是我尝试做的基本结构。因此,当for
部分中的do while
循环得到满足时,我希望突破else
循环(执行循环执行一次,无论提到的条件如何,我都不想退出那么循环,但我想在条件实际满足时退出循环)。我怎么做?我尝试了如代码中所示的断开,但它在第一次迭代通过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,它总是处于递增的顺序。
答案 0 :(得分:1)
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++;
}
答案 1 :(得分:1)
通常的做法是通过旗帜:
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 ++没有检查数组大小)。一旦你知道角落案例应该如何表现,你应该相应地修改这些片段。
答案 2 :(得分:0)
我猜你在那里犯了一些错误的逻辑。如果a.get(j).equals(10)
不是true
,那么for
循环将在j
的第一次迭代中中断,或者您将以j
的值结束无限循环永远不会改变。
答案 3 :(得分:-1)
根据这条评论:
我想打印ArrayList中的值a从10开始直到 20 ...和10可以在列表中的任何位置而不是开头
解释为arylylist在某个地方包含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);
答案 4 :(得分:-1)
根据你的陈述
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);
}
}
答案 5 :(得分:-1)
其他人都修复了你的循环。
要回答标题中的问题,打破复杂循环的最简单方法是将复杂循环放在方法中,并使用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;
}
}
}