私は初めてこのキーワードを見ました、そして、誰かがそれが何をするのか私に説明できるかどうか疑問に思いました。
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;
continue
はgoto
のようなものです。あなたは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);
}
これは奇数のみを表示します。
一般的に、私はcontinue
(およびbreak
)が、特にwhile
またはfor
のループ宣言がすぐに見えない場合に、コードが何らかのリファクタリングを使用する可能性があるという警告として考えます。メソッドの途中のreturn
についても同じことが言えますが、少し異なる理由があります。
他の人がすでに言ったように、continue
はループの次の繰り返しに移動しますが、break
は外側のループから出ます。
continue
/break
とそれが継続している/中断しているループとの間にコンテキスト以外の直接的なリンクがないため、これらはメンテナンス時限爆弾になる可能性があります。内側のループを追加するか、ループの "ガッツ"を別のメソッドに移動すると、continue
/break
が失敗するという隠れた効果があります。
私見、それは最後の手段の尺度としてそれらを使うこと、そしてそれから次の開発者が一つのスクリーンでループの「境界」を見ることができるようにそれらの使用がループの始めか終わりでしっかりとまとめられることを確実にすること。
continue
、break
、およびreturn
(メソッドの最後にあるOne True Return以外)はすべて、「非表示GOTO」の一般的なカテゴリに分類されます。それらはループや機能制御を予期しない場所に置き、それが最終的にバグを引き起こします。
Javaでの "continue"は現在のループの終わりに行くことを意味します。つまり、コンパイラがループ内でcontinueを見ると、次の繰り返しに進みます。
例:これは、1から10までの奇数を印刷するためのコードです。
次の繰り返しに移動し続けるのがわかると、コンパイラは印刷コードを無視します。
for (int i = 0; i < 10; i++) {
if (i%2 == 0) continue;
System.out.println(i+"");
}
すでに述べたように、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%の奇数しか含まれていないとしたら...あなたは間違っています!
もしそうでなければ条件を検討してください。 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)に進む。ブレイクのために:それはループから出て、そして「ループから出て」を印刷する。
ちょっとパーティーに遅れていますが…
continue
は、すべての作業がループを制御する条件式で行われる空のループに役立ちます。例えば:
while ((buffer[i++] = readChar()) >= 0)
continue;
この場合、文字を読み込んでbuffer
に追加する作業はすべて、while
ループを制御する式で行われます。 continue
ステートメントは、ループが本体を必要としないことを視覚的に示しています。
同等のものよりももう少し明らかです。
while (...)
{ }
次のような空の文を使用するよりも、確実に優れた(そしてより安全な)コーディングスタイルです。
while (...)
;
基本的にJavaでは、continueは文です。そのため、continueステートメントは通常、現在の繰り返しをスキップするためにループと共に使用されます。
それがJavaでどのようにそしていつ使用されるかについては、下記のリンクを参照してください。例で説明を得ています。
https://www.flowerbrackets.com/continue-Java-example/
それが役に立てば幸い !!
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ステートメントは、ループ内の残りのステートメントを実行せずに単純にループから抜け出し、次の反復をトリガーします。