web-dev-qa-db-ja.com

"continue"キーワードとは何ですか?また、それはJavaでどのように機能しますか?

私は初めてこのキーワードを見ました、そして、誰かがそれが何をするのか私に説明できるかどうか疑問に思いました。

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

ラベルのない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;
403

continuegotoのようなものです。あなたはbreakに精通していますか?対照的にそれらについて考えるのは簡単です:

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

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

497
Dustin

例を見てみましょう。

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

これは1から100までの奇数だけの合計を得るでしょう。

96
Gant

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

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

これは奇数のみを表示します。

28
Vineet

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

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

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

私見、それは最後の手段の尺度としてそれらを使うこと、そしてそれから次の開発者が一つのスクリーンでループの「境界」を見ることができるようにそれらの使用がループの始めか終わりでしっかりとまとめられることを確実にすること。

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

17
Tom Dibble

Javaでの "continue"は現在のループの終わりに行くことを意味します。つまり、コンパイラがループ内でcontinueを見ると、次の繰り返しに進みます。

例:これは、1から10までの奇数を印刷するためのコードです。

次の繰り返しに移動し続けるのがわかると、コンパイラは印刷コードを無視します。

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

5
Ibrahim Hout

すでに述べたように、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
Kostas Chalkias

もしそうでなければ条件を検討してください。 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の代わりにbreakを使うと(After if。)、それはaaを出力し、ループから抜けます

条件「bb」がssに等しい場合:継続の場合:次の反復、すなわち「cc」等式(ss)に進む。ブレイクのために:それはループから出て、そして「ループから出て」を印刷する。

3
phanindravarma

ちょっとパーティーに遅れていますが…

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

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

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

同等のものよりももう少し明らかです。

while (...)
{ }

次のような空の文を使用するよりも、確実に優れた(そしてより安全な)コーディングスタイルです。

while (...)
    ;
2
David R Tribble

基本的にJavaでは、continueは文です。そのため、continueステートメントは通常、現在の繰り返しをスキップするためにループと共に使用されます。

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

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

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

1
Shiva

Continueは、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ステートメントは、ループ内の残りのステートメントを実行せずに単純にループから抜け出し、次の反復をトリガーします。

1
Akshay