0

switch 条件ステートメントのコードを実行していました

char c1=65;
switch(c1){
  case 'A':
    System.out.println("one");
  default:
    System.out.println("two");
  case 'b':
    System.out.println("three");
}

結果は「1 2 3」でしたが、デバッグ中に、最初に A の ASCII 値 65 であるケース A に入ることがわかりましたが、残りのすべてのケースも実行されますが、ブレークを入れると; これは、ブレークを設定しない場合、すべてのケースを実行し続けることを意味します。アドバイスしてください。

4

7 に答える 7

6

breakを付けないと、一致したケースの後のすべての残りのケースが自動的に実行されます。コントロールは、次の 2 つのケースでスイッチ ケースから出てきます。

1. When it ends.
2. When it finds a break.
于 2012-04-29T06:43:52.877 に答える
2

Java 言語仕様 セクション 14.11を読むことができます。switch ブロックの実行方法が明確に定義されています。

ありがとう

于 2012-04-29T06:54:10.457 に答える
1

Break を使用してSwitchの最後に移動し、switch ステートメントの実行を完了します。

Javaに限らず、多くの言語で同じです。

于 2012-04-29T06:57:56.983 に答える
1

はい、マッチング ケースの下にあるすべての残りのケースが実行されます。
一致するケースが最後にある場合、一致するケースのみが実行されるか、一致するケースが一致するケースの上の中間ケースにある場合は実行されませんが、一致するケースより下のケースは一致するケースとともに実行されます。

char c1=65; switch(c1)
{
   case 'B':
      System.out.println("three");

   default:
      System.out.println("two");

   case 'A':
      System.out.println("one");  
} 

この状況では、出力は になりますone

于 2012-04-30T05:07:26.320 に答える
1
于 2012-04-29T06:44:35.220 に答える
1

@ user1351820、あなたの理解は正しいです。

各 break ステートメントは、囲んでいる switch ステートメントを終了します。制御フローは、switch ブロックに続く最初のステートメントから続行されます。break ステートメントがないと、switch ブロック内のステートメントが失敗するため、breakステートメントが必要です 。プログラムSwitchDemoFallThroughは、失敗する switch ブロック内のステートメントを示しています。プログラムは、整数の月に対応する月と、その年の次の月を表示します。All statements after the matching case label are executed in sequence, regardless of the expression of subsequent case labels, until a break statement is encountered.

技術的には、フローが switch ステートメントから外れるため、最後のブレークは必要ありません。コードの変更が容易になり、エラーが発生しにくくなるように、ブレークを使用することをお勧めします。default セクションは、case セクションのいずれかによって明示的に処理されないすべての値を処理します。
参照: docs.oracle

于 2012-04-30T04:53:05.883 に答える
0

はい、caseステートメントは失敗します。背景の理由に興味がある場合、この構造は C に由来します。C は「マクロを使用したアセンブラー」とも呼ばれ、非常に低レベルの言語であることを意味します。C で定義されたswitchステートメントは、最適な実装に最適です。切り替えられる値にいくつかの制約があり、必要な命令は 2 つだけです。1 つはジャンプ先のアドレスのテーブル ルックアップ用で、もう 1 つはジャンプ用です。ジャンプの実行後は、それ以上の介入なしで続行されるためbreak、ブロックから抜け出すには明示的に指定する必要があります。

于 2012-04-29T07:37:26.760 に答える