私はこのキーワードを初めて見たので、誰かがそれが何をするのか説明してもらえないだろうかと思っていました.
continue
キーワードは何ですか?- それはどのように機能しますか?
- いつ使用されますか?
continue
のようなものgoto
です。あなたは知っていbreak
ますか?対照的に考える方が簡単です。
break
ループを終了します (その下のコードにジャンプします)。
continue
現在の繰り返しのループ内のコードの残りの処理を終了しますが、ループは続行します。
ラベルのないステートメントは、最も内側またはループの条件から、および最も内側のループの更新式からcontinue
再実行されます。多くの場合、ループの処理を早期に終了し、それによって深くネストされたステートメントを回避するために使用されます。次の例では、ループ内で次のステートメントを処理せずに、次の行を取得します。while
do
for
if
continue
while (getNext(line)) {
if (line.isEmpty() || line.isComment())
continue;
// More code here
}
ラベルを使用するcontinue
と、最も内側のループではなく、対応するラベルの付いたループから再実行されます。これは、深くネストされたループをエスケープするため、または単にわかりやすくするために使用できます。
continue
空のループ本体をより明確にするために、プレースホルダーとして使用されることもあります。
for (count = 0; foo.moreData(); count++)
continue;
ラベルのない同じステートメントは、C および C++ にも存在します。Perl での同等物はnext
.
このタイプの制御フローは推奨されませんが、選択した場合は、 を使用continue
して制限された形式の をシミュレートすることもできますgoto
。次の例では、空のループcontinue
が再実行されます。for (;;)
aLoopName: for (;;) {
// ...
while (someCondition)
// ...
if (otherCondition)
continue aLoopName;
例を見てみましょう:
int sum = 0;
for(int i = 1; i <= 100 ; i++){
if(i % 2 == 0)
continue;
sum += i;
}
これは、1 から 100 までの奇数のみの合計を取得します。
ループの本体をサブルーチンと考えると、continue
はのようなものreturn
です。同じキーワードがCに存在し、同じ目的を果たします。不自然な例を次に示します。
for(int i=0; i < 10; ++i) {
if (i % 2 == 0) {
continue;
}
System.out.println(i);
}
これにより、奇数のみが出力されます。
通常、continue
(and ) は、特にorループ宣言がすぐに見えない場合に、コードがリファクタリングを使用する可能性がbreak
あるという警告として表示されます。メソッドの途中でも同じことが言えますが、理由は少し異なります。while
for
return
他の人がすでに言ったようcontinue
に、ループの次の繰り返しにbreak
移動し、囲まれているループから出ます。
continue
/break
と、コンテキスト以外にループが継続/中断しているループとの間に直接のリンクがないため、これらはメンテナンス時限爆弾になる可能性があります。内部ループを追加するか、ループの「内臓」を別のメソッドに移動すると、continue
/break
失敗の隠れた効果があります。
IMHO、最後の手段としてそれらを使用し、次の開発者が1つの画面でループの「境界」を確認できるように、ループの開始または終了でそれらの使用がしっかりとグループ化されていることを確認するのが最善です.
continue
、break
、およびreturn
(メソッドの最後にある One True Return 以外) はすべて、「非表示の GOTO」の一般的なカテゴリに分類されます。ループと関数の制御を予期しない場所に配置し、最終的にバグを引き起こします。
すでに述べcontinue
たように、その下のコードの処理をループの最後までスキップします。次に、ループの条件に移動し、この条件がまだ保持されている場合は次の反復を実行します (または、フラグがある場合は、示されたループの条件に)。
ループの先頭ではなく、 のdo - while
後に一番下の状態に移動する場合は強調する必要があります。continue
これが、多くの人が次のコードが生成するものを正しく答えられない理由です。
Random r = new Random();
Set<Integer> aSet= new HashSet<Integer>();
int anInt;
do {
anInt = r.nextInt(10);
if (anInt % 2 == 0)
continue;
System.out.println(anInt);
} while (aSet.add(anInt));
System.out.println(aSet);
*あなたの答えがaSet
100% 奇数のみを含むとしたら...あなたは間違っています!
If Else 条件を考えてみましょう。continue ステートメントは、条件にあるものを実行し、条件から抜け出します。つまり、次の反復または条件にジャンプします。しかし、Break はループを離れます。次のプログラムを検討してください。'
public class ContinueBreak {
public static void main(String[] args) {
String[] table={"aa","bb","cc","dd"};
for(String ss:table){
if("bb".equals(ss)){
continue;
}
System.out.println(ss);
if("cc".equals(ss)){
break;
}
}
System.out.println("Out of the loop.");
}
}
次のように出力されます: aa cc ループから抜け出します。
continue(After if.) の代わりに break を使用すると、単にaa と out of the loop が出力されます。
条件 "bb" equals ss が満たされる場合: Continue の場合: 次の繰り返し、つまり "cc".equals(ss) に進みます。ブレークの場合: ループから抜け出し、「Out of the loop.」と出力します。