Java中复杂循环结构的突破



我是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;
        }
    }
}

最新更新