7

switch-case ブロックの中括弧に関する質問があります

 switch( conditon ) { 

   case val1: {
      // something 
   }
   break;
   case val2: {
      // something 
   }
   break; 
   default:
   break;  
}

またはこのようなもの:

 switch( conditon ) { 

   case val1: {
      // something 
      break;
   }
   case val2: {
      // something 
      break;
   } 
   default:
   break;  
}

AI は両方のコードが同じように機能することを知っていますが、ここにはいくつかの不合理があると思います。ブレークによって中括弧ブロックから飛び出す必要があるため、理論的には 2 番目のコードは次のように滑らかにする必要があります。

どのバージョンを使用することをお勧めしますか?それらは本当に同じように機能しますか?

4

2 に答える 2

6

これを試して:

{
System.out.println("A");
break;
System.out.println("B");
}

わかるでしょ

$ javac Y.java 
Y.java:35: error: break outside switch or loop
    break;
    ^
1 error

つまり、ブロック内では使用できません。ブロックと組み合わせても効果はありません。

ブレークをブロックの外に置くつもりはありませんが、どちらの方法も要求するコーディング規則を見たことはありません (そして、両方の側に引数を入れることができます)。おそらくこれは、スイッチ ブランチごとに可視性を分離するためにブロックがあまり使用されていないためです。

于 2015-03-26T09:49:24.850 に答える
2

中括弧は変数のスコープを制限します。オプションの場合を除き、if、for、while、switch.. ブロック以外のフロー制御には影響しません。

于 2015-03-26T09:52:38.413 に答える