836

C# (他の言語については自由に回答してください) ループでは、ループの構造を離れて次の反復に進む手段としてのbreakとの違いは何ですか?continue

例:

foreach (DataRow row in myTable.Rows)
{
    if (someConditionEvalsToTrue)
    {
        break; //what's the difference between this and continue ?
        //continue;
    }
}
4

16 に答える 16

1564

breakループを完全に終了し、現在の反復をスキップcontinueします。

例えば:

for (int i = 0; i < 10; i++) {
    if (i == 0) {
        break;
    }

    DoSomeThingWith(i);
}

ブレークにより、ループは最初の繰り返しで終了します -DoSomeThingWith実行されることはありません。これはここです:

for (int i = 0; i < 10; i++) {
    if(i == 0) {
        continue;
    }

    DoSomeThingWith(i);
}

DoSomeThingWithforは実行されませんi = 0が、ループは継続し、 for toDoSomeThingWithが実行されます。i = 1i = 9

于 2008-08-08T21:51:35.397 に答える
391

これを理解するための非常に簡単な方法は、各キーワードの後に​​「ループ」という単語を配置することです。用語は、日常のフレーズのように読むだけで意味をなすようになりました。

breakloop - ループが壊れて停止します。

continueloop - ループは次の繰り返しで実行を続けます。

于 2008-08-08T22:33:31.020 に答える
106

breakにより、プログラム カウンターが最も内側のループの範囲から飛び出します。

for(i = 0; i < 10; i++)
{
    if(i == 2)
        break;
}

このように動作します

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto BREAK;
}
BREAK:;

continueはループの最後にジャンプします。for ループでは、インクリメント式にジャンプし続けます。

for(i = 0; i < 10; i++)
{
    if(i == 2)
        continue;

    printf("%d", i);
}

このように動作します

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto CONTINUE;

    printf("%d", i);

    CONTINUE:;
}
于 2008-08-19T20:21:17.633 に答える
50

中断と継続をいつ使用するか?

  1. ブレイク- 解散するようなものです。さみしい、お別れだ。ループが終了します。

壊す

  1. 続行- 今日は休んで、明日すべてを整理することを意味します (つまり、現在の反復をスキップします)。

継続する

(陳腐な話 ¯_(ツ)_/¯ でも覚えるのに役立ちます - そしてうまくいけばあなたも!)

于 2017-12-05T23:07:37.827 に答える
30

breakforeachループを完全に停止continueし、次へスキップしDataRowます。

于 2008-08-08T21:50:09.347 に答える
20

嫌いな人も少なくbreakないcontinue。それらについて私が見た最新の苦情は、Douglas Crockford によるJavaScript: The Good Partsでした。do-whileしかし、特に言語にループのordo-untilスタイルが含まれていない場合は、それらのいずれかを使用すると物事が本当に単純化されることがあります。

breakリストから何かを検索するループで使用する傾向があります。見つかったら続けても意味がないのでやめたほうがいいです。

リストのほとんどの要素で何かを行うときに使用continueしますが、それでもいくつかをスキップしたい.

このbreakステートメントは、誰かまたは何かからの有効な応答をポーリングするときにも役立ちます。それ以外の:

Ask a question
While the answer is invalid:
    Ask the question

いくつかの重複を排除して使用できます:

While True:
    Ask a question
    If the answer is valid:
        break

do-until前に述べたループは、その特定の問題に対するより洗練された解決策です。

Do:
    Ask a question
    Until the answer is valid

break重複も必要もありません。

于 2008-08-08T22:35:46.757 に答える
13

すべてが非常に良い説明をしました。それが助けになるかどうかの例を示すために、私はまだ私の答えを投稿しています。

// break statement
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        break; // It will force to come out from the loop
    }

    lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}

出力は次のとおりです。

0[印刷]1[印刷]2[印刷]

したがって、i == 3の場合、ブレークがあるため、3[印刷済み]と4[印刷済み]は表示されません。

//continue statement
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        continue; // It will take the control to start point of loop
    }

    lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}

出力は次のとおりです。

0[印刷]1[印刷]2[印刷]4[印刷]

したがって、i == 3の場合は続行があるため、3[印刷済み]は表示されません。

于 2010-12-21T07:27:03.600 に答える
7

壊す

Break はループを強制的に即座に終了させます。

継続する

これはブレークの反対です。ループを終了する代わりに、すぐに再びループし、残りのコードをスキップします。

于 2013-03-28T06:58:57.063 に答える
6

簡単な答え:

Breakはすぐにループを終了します。
Continueは、次のアイテムの処理を開始します。(もしあれば、for/while の評価行にジャンプすることによって)

于 2008-10-22T09:11:16.850 に答える
6

例によって

foreach(var i in Enumerable.Range(1,3))
{
    Console.WriteLine(i);
}

1、2、3 を (別々の行に) 印刷します。

i = 2 でブレーク条件を追加

foreach(var i in Enumerable.Range(1,3))
{
    if (i == 2)
        break;

    Console.WriteLine(i);
}

これで、ループは 1 を出力して停止します。

休憩を継続に置き換えます。

foreach(var i in Enumerable.Range(1,3))
{
    if (i == 2)
        continue;

    Console.WriteLine(i);
}

次に、プリント 1 と 3 をループします (2 をスキップします)。

したがって、breakループを停止しますcontinueが、次の反復にスキップします。

于 2013-10-10T15:34:49.427 に答える
5

明白なことを述べさせてください。中断も続行も追加しないと、プログラムが再開されることに注意してください。つまり、特定のエラーをトラップし、それをログに記録した後、処理を再開したいと思いました。次の行の間にさらにコードタスクがあったので、それをそのままにしました。

于 2009-03-23T18:23:02.750 に答える
5

残念ながら、Ruby は少し異なります。PS: 記憶が曖昧なので間違っていたらすみません

ブレーク/コンティニューの代わりに、ループに関して同じように動作するブレーク/ネクストがあります

ループ (他のすべてのものと同様) は式であり、最後に実行したことを「返します」。ほとんどの場合、ループからの戻り値の取得は無意味なので、誰もがこれを行うだけです

a = 5
while a < 10
    a + 1
end

ただし、これを行うことができます

a = 5
b = while a < 10
    a + 1
end # b is now 10

しかし、多くの ruby​​ コードは、ブロックを使用してループを「エミュレート」します。標準的な例は

10.times do |x|
    puts x
end

ブロックの結果を使って何かをしたいと思うことの方がはるかに一般的であるため、ここが厄介なところです。ブレーク/次は、ブロックのコンテキストでは異なることを意味します。

break は、ブロックを呼び出したコードから飛び出します

next は、ブロック内の残りのコードをスキップし、指定したものをブロックの呼び出し元に「返します」。これは、例がなければ意味がありません。

def timesten
    10.times{ |t| puts yield t }
end


timesten do |x|
   x * 2
end
# will print
2
4
6
8 ... and so on


timesten do |x|
    break
    x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped

timesten do |x|
    break 5
    x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5

timesten do |x|
    next 5
    x * 2
end 
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.

そうそう。Ruby は素晴らしいですが、いくつかのひどいコーナー ケースがあります。これは、私が何年も使用してきた中で2番目に悪いものです:-)

于 2008-08-09T02:31:13.537 に答える
3

foreach ループから完全に抜け出すには、breakを使用します。

ループの次の繰り返しに進むには、continueを使用します。

ブレークは、オブジェクトのコレクション (データテーブルの行など) をループして特定の一致を検索している場合に役立ちます。その一致が見つかった場合、残りの行を続行する必要がないため、ブレークしたいアウト。

Continueは、ループの繰り返しで必要なことを完了したときに役立ちます。通常、 ifの後にcontinueがあります。

于 2013-03-09T12:50:42.173 に答える
2

ブレークを使用したくない場合は、反復条件が false になり、次の反復でループが実行されないように I の値を増やします。

for(int i = 0; i < list.Count; i++){
   if(i == 5)
    i = list.Count;  //it will make "i<list.Count" false and loop will exit
}
于 2016-02-03T06:18:55.190 に答える