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 ループは、言及された条件に関係なく 1 回実行されます。その場合、ループを終了したくありませんが、条件が満たされたときにループを終了します。実際に満足)。それ、どうやったら出来るの?コードに示すようにブレークしようとしましたが、ループの最初の反復後に停止します。どこが間違っていますか?do whileelsedo-while

ArrayList a10 から 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 が 1 つだけあり、常に昇順になっています。

4

6 に答える 6

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 が複数ある場合はどうなりますか? たとえば、私の 2 番目のスニペットは、それらの一部でクラッシュする可能性があります (配列サイズをチェックしない i++ のため)。コーナー ケースがどのように動作するかがわかったら、それに応じてそれらのスニペットを変更する必要があります。

于 2013-06-27T12:41:21.063 に答える
0

そこに間違ったロジックを入れていると思います。そうa.get(j).equals(10)でない場合、 の最初の繰り返しでループが中断するtrueか、の値が変化しないため、無限ループに陥ります。forjj

于 2013-06-27T12:02:40.120 に答える