"continue"キーワードとは何ですか?また、Javaではどのように動作しますか?


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

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

Answers



ラベルを持たないcontinue文は、最も内側のwhileまたはdoループの条件と、最も内側のforループのupdate式から再実行さforます。 ループの処理を早期終了させ、深くネストされたif文を避けるためによく使われます。 次の例でcontinueは、ループ内の次のステートメントを処理せずに次の行を取得します。

while (getNext(line)) {
  if (line.isEmpty() || line.isComment())
    continue;
  // More code here
}

ラベルでcontinuecontinueは最も内側のループではなく、対応するラベルでループから再実行されます。 深くネストされたループをエスケープしたり、わかりやすくするために使用することができます。

continueは、空のループボディをより明確にするために、プレースホルダとしても使用されることcontinueあります。

for (count = 0; foo.moreData(); count++)
  continue;

ラベルのない同じステートメントもCおよびC ++に存在します。 Perlの等価物はnextます。

このタイプの制御フローは推奨されませんが、そのように選択した場合は、 continueを使用して限られた形式のgotoをシミュレートすることもできます。 次の例では、 continuefor (;;)ループfor (;;)for (;;)再実行します。

aLoopName: for (;;) {
  // ...
  while (someCondition)
  // ...
    if (otherCondition)
      continue aLoopName;



continuegotoのようなものです。 あなたはbreak精通しbreakますか? 対照的に考えることは簡単です。

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

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




例を見てみましょう

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

奇数だけが出力されます。




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

他の人がすでに言っているように、ループの次の反復に移動しcontinuebreakは囲むループから移動します。

continue / breakとコンテキスト以外のcontinue / breakのループとの間には即時リンクが存在しないため、これはメンテナンス時の時間爆弾になる可能性があります。 内側のループを追加するか、ループの "guts"を別のメソッドに移動すると、 continue / break失敗するという隠れた効果があります。

IMHOでは、最後の手段としてそれらを使用し、ループの開始時または終了時にそれらの使用が密接にグループ化されていることを確認して、次の開発者がループの「境界」を1つの画面。

(あなたの方法の最後に真の1つのリターンを除いて) continuebreak 、そしてreturnものは、すべて「隠れたGOTO」という一般的なカテゴリーに分類されます。 予期せぬ場所にループや関数の制御を配置すると、最終的にバグが発生します。




既に言及したように、 continueはそのコードをループの最後までスキップします。 次に、 ループの条件に移動し、この条件がまだ成立している場合(またはフラグがある場合は、指定されたループの条件に)、次の繰​​り返しを実行します。

do - whileの場合は、ループの始めではなく、 continue後の下部にある条件に移動するdo - while 、強調表示する必要があります。

これは、多くの人が次のコードが生成するものに正しく答えることができない理由です。

    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ステートメントは、条件内にあるものを実行し、条件を抜け出す、つまり次の反復または条件にジャンプします。 しかし、ブレイクはループを離れます。 次のプログラムを考えてみましょう。 '

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を使用すると(if if。)、 aaを出力してループの外に出ます

条件 "bb"がssと等しい場合:Continue:次の反復、すなわち "cc" .equals(ss)に進む。 ブレイクの場合:ループの外に出て、 "Out of the loop"を表示します。




Javaの "continue"は現在のループの最後に移動します。つまり、コンパイラがループ内で継続していると見なした場合、次の繰り返しに移ります

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

コンパイラは、次の反復に移動し続けると見えるときはいつでも印刷コードを無視します

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



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

continueは、ループを制御する条件式ですべての作業が行われる空のループにとって便利です。 例えば:

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

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

同等以上のことはもう少し分かります。

while (...)
{ }

そして、より良い(そしてより安全な)コーディングスタイルは、次のような空文を使用するよりも優れています。

while (...)
    ;



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

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

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

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