在Java中打破复杂的循环结构

时间:2013-06-27 11:48:11

标签: java loops

我是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,它总是处于递增的顺序。

6 个答案:

答案 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;
        }
    }
}