0

我是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循环执行一次,无论提到的条件如何,我都不想退出循环,但是我想在条件为时退出循环实际满意)。我怎么做?我尝试按照代码所示进行中断,但它在第一次循环迭代后停止。我哪里错了?do whileelsedo-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,并且始终按递增顺序排列。

4

6 回答 6

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++;
}
于 2013-06-27T12:30:30.970 回答
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++ 没有检查数组大小)。一旦你知道极端情况应该如何表现,你应该相应地修改这些片段。

于 2013-06-27T12:41:21.063 回答
0

我猜你在那里放了一些错误的逻辑。如果a.get(j).equals(10)不是true,则for循环将在第一次迭代中中断,j或者您将进入无限循环,因为 的值j永远不会改变。

于 2013-06-27T12:02:40.120 回答
-1

根据此评论:

我想打印从 10 到 20 的 ArrayList a 中的值......并且 10 可以在列表中的任何位置而不是开头

解释为 arraylist 在某处包含 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);
于 2013-06-27T12:12:59.603 回答
-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);
   }
}
于 2013-06-27T12:17:10.457 回答
-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;
        }
    }
}
于 2013-06-28T15:18:23.623 回答