「続行」キーワードとは何ですか?それはJavaでどのように機能しますか?


302

このキーワードを初めて見たとき、誰かに説明してもらえないかと思っていました。

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

回答:


416

continueラベルのない文では、条件最も内側から再実行しますwhiledoループ、および最も内側の更新式から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;

513

continueのようなものgotoです。知っていbreakますか?対照的に、それらについて考える方が簡単です。

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

  • continue 現在の反復でループ内のコードの残りの処理を終了しますが、ループは継続します。


1
ブレイクアンドコンティニューの良い例です。以前は同じだと思いました>。<
yfsx

それを素敵な完璧な500にすることは不可能です!+1
帽子

100

例を見てみましょう:

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

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


28

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

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

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


16

一般的に、私はcontinue(そしてbreak)コード何らかのリファクタリングを使用する可能性があるという警告として(特に、whileまたはforループ宣言がすぐに見えない。returnメソッドの途中でも同じことが言えますが、理由は少し異なります。

他の人がすでに言ったように、 continueに、ループの次の反復にbreak移動し、外側のループから移動します。

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

私見、最後の手段として使用することをお勧めします。次に、ループの最初または最後でそれらの使用がしっかりとグループ化されていることを確認して、次の開発者が1つの画面でループの「境界」を確認できるようにします。 。

continuebreak、およびreturn「隠された型GOTO」の一般的なカテゴリにすべての秋(あなたのメソッドの最後で唯一の真のリターンを除きます)。彼らはループと機能制御を予期しない場所に置き、それが最終的にバグを引き起こします。


返品が悪い理由に興味があります。Scalaは返品を奨励していないため、返品は悪いとすでに感じています
Jus12

1
一方、深くネストされたループからメソッドが戻ることを許可することは、ループの終了をより見やすくするために追加の変数を作成するのではなく、最も簡単で、最も読みやすく、最も合理的な方法です。
デビッドRトリブル

5

Javaで「続行する」とは、現在のループの最後に移動することを意味します。つまり、コンパイラーがループで継続していると判断した場合、次の反復に進みます

例:これは、1から10までの奇数を出力するコードです

コンパイラーは、次のイテレーションへの移動が継続していることがわかると、常に印刷コードを無視します

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


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);

*あなたの答えがaSet奇数しか含まれていない場合は100%...あなたは間違っています!


4

続行キーワードです Javaのであり、現在の反復をスキップするために使用されます。

1から100までのすべての奇数を印刷するとします。

public class Main {

    public static void main(String args[]) {

    //Program to print all odd numbers from 1 to 100

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

    }
}

上記のプログラムのcontinueステートメントは、iが偶数の場合は反復をスキップし、奇数の場合はiの値を出力します。

Continueステートメントは、ループ内の残りのステートメントを実行せずにループから抜け出し、次の反復をトリガーします。


3

If Else条件を考えます。continueステートメントは、条件にあるものを実行し、条件から抜け出します。つまり、次の反復または条件にジャンプします。しかし、ブレイクはループを去ります。次のプログラムを検討してください。」

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が出力され、ループから抜けます

条件「bb」がssと等しい場合:続行の場合:次の反復、つまり「cc」.equals(ss)に進みます。休憩の場合:ループから出て、「ループから出ました」と出力します。


2
"cc"!= "bb"以降のccも出力し、printステートメントがbreak
Ted Delezene

2

パーティーには少し遅れますが...

これcontinueは、ループを制御する条件式ですべての作業が行われる空のループに役立つことは言及に値します。例えば:

while ((buffer[i++] = readChar()) >= 0)
    continue;

この場合、文字の読み取りと追加のすべての作業はbufferwhileループを制御する式で行われます。このcontinueステートメントは、ループに本体が必要ないことを視覚的に示します。

それは同等のものより少し明白です:

while (...)
{ }

次のような空のステートメントを使用するよりも間違いなく優れた(そして安全な)コーディングスタイル

while (...)
    ;

それがよりクリーンで読みやすいコードであることに私は間違いなく同意しますが、それが他のオプションよりも「安全」であるというあなたの主張に従うかどうかはわかりません。セミコロンを使用して直接区切ります。
アホロートル

@Aalok-単一のセミコロンは視覚的に見落としがちなので、安全です。また、誤って除外するのも簡単です。これにより、に続く次のステートメントwhilewhile節の本体になり、視覚的にわかりにくくなります。明示的であることcontinueは明白であり、空のステートメントではそうではないという意図を伝えます。
デビッドRトリブル

そうですね、それは主にデザインの観点からです。それは理にかなっている。ループがどのように構造化されているかについて、根底にある何かがありました。
axolotl

1

基本的にJavaでは、continueはステートメントです。したがって、continueステートメントは通常、現在の反復をスキップするためにループで使用されます。

Javaでいつどのように使用するかについては、以下のリンクを参照してください。例を挙げて説明しています。

https://www.flowerbrackets.com/continue-java-example/

それが役に立てば幸い !!



0

ループの次の反復にすぐにジャンプする必要がある場合、continueステートメントはループ制御構造で使用されます。

forループまたはwhileループで使用できます。Javaのcontinueステートメントは、ループを継続するために使用されます。プログラムの現在のフローを続行し、指定された条件で残りのコードをスキップします。

内側のループの場合、それは内側のループのみを継続します。

forループ、whileループ、do-whileループなど、あらゆるタイプのループでJavaのcontinueステートメントを使用できます。

例えば

class Example{
    public static void main(String args[]){
        System.out.println("Start");
        for(int i=0; i<10; i++){
            if(i==5){continue;}
            System.out.println("i : "+i);   
        }
        System.out.println("End.");
    }
}

出力:

Start
i : 0
i : 1
i : 2
i : 3
i : 4
i : 6
i : 7
i : 8
i : 9
End.

[5番はスキップ]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.