314

私はこのキーワードを初めて見たので、誰かがそれが何をするのか説明してもらえないだろうかと思っていました.

  • continueキーワードは何ですか?
  • それはどのように機能しますか?
  • いつ使用されますか?
4

13 に答える 13

527

continueのようなものgotoです。あなたは知っていbreakますか?対照的に考える方が簡単です。

  • breakループを終了します (その下のコードにジャンプします)。

  • continue現在の繰り返しのループ内のコードの残りの処理を終了しますが、ループは続行します。

于 2008-12-23T18:54:47.237 に答える
424

ラベルのないステートメントは、最も内側またはループの条件から、および最も内側のループの更新式からcontinue再実行されます。多くの場合、ループの処理を早期に終了し、それによって深くネストされたステートメントを回避するために使用されます。次の例では、ループ内で次のステートメントを処理せずに、次の行を取得します。whiledoforifcontinue

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;
于 2008-12-23T18:53:30.420 に答える
104

例を見てみましょう:

int sum = 0;
for(int i = 1; i <= 100 ; i++){
    if(i % 2 == 0)
         continue;
    sum += i;
}

これは、1 から 100 までの奇数のみの合計を取得します。

于 2008-12-23T18:56:53.677 に答える
28

ループの本体をサブルーチンと考えると、continueはのようなものreturnです。同じキーワードがCに存在し、同じ目的を果たします。不自然な例を次に示します。

for(int i=0; i < 10; ++i) {
  if (i % 2 == 0) {
    continue;
  }
  System.out.println(i);
}

これにより、奇数のみが出力されます。

于 2008-12-23T19:00:30.377 に答える
16

通常、continue(and ) は、特にorループ宣言がすぐに見えない場合に、コードリファクタリングを使用する可能性がbreakあるという警告として表示されます。メソッドの途中でも同じことが言えますが、理由は少し異なります。whileforreturn

他の人がすでに言ったようcontinueに、ループの次の繰り返しにbreak移動し、囲まれているループから出ます。

continue/breakと、コンテキスト以外にループが継続/中断しているループとの間に直接のリンクがないため、これらはメンテナンス時限爆弾になる可能性があります。内部ループを追加するか、ループの「内臓」を別のメソッドに移動すると、continue/break失敗の隠れた効果があります。

IMHO、最後の手段としてそれらを使用し、次の開発者が1つの画面でループの「境界」を確認できるように、ループの開始または終了でそれらの使用がしっかりとグループ化されていることを確認するのが最善です.

continuebreak、およびreturn(メソッドの最後にある One True Return 以外) はすべて、「非表示の GOTO」の一般的なカテゴリに分類されます。ループと関数の制御を予期しない場所に配置し、最終的にバグを引き起こします。

于 2008-12-23T23:18:08.080 に答える
4

すでに述べ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);

*あなたの答えがaSet100% 奇数のみを含むとしたら...あなたは間違っています!

于 2016-03-22T18:51:15.970 に答える
3

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.」と出力します。

于 2016-08-29T16:11:06.540 に答える