9

次のコードはなぜですか。

class swi  
{
    public static void main(String[] args)  
    {  
        int a=98;
        switch(a)
        {
            default:{ System.out.println("default");continue;}
            case 'b':{ System.out.println(a); continue;}
            case 'a':{ System.out.println(a);}
        }
        System.out.println("Switch Completed");
    }
}

エラーが発生します:

ループの外側に進む

4

7 に答える 7

23

フォールスルーはswitchステートメントの標準的な動作であるため、switchステートメントでcontinueを使用しても意味がありません。continueステートメントは、for / while /do..whileループでのみ使用されます。

あなたの意図の私の理解に基づいて、あなたはおそらく書きたいと思うでしょう:

System.out.println("default");
if ( (a == 'a') || (a == 'b') ){
    System.out.println(a);
}

また、デフォルトの条件を最後に配置することをお勧めします。

編集:continueステートメントをswitchステートメント内で使用できないというのは完全に真実ではありません。(理想的にはラベル付けされた)continueステートメントは完全に有効です。例えば:

public class Main {
public static void main(String[] args) {
    loop:
    for (int i=0; i<10; i++) {
        switch (i) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 9:
            continue loop;
        }

        System.out.println(i);
    }
}
}

これにより、次の出力が生成されます。0 2 4 6 8

于 2010-03-26T07:52:22.257 に答える
8

-continueステートメントは、スイッチではなくループで使用できます。おそらく必要なのはですbreak

于 2010-03-26T07:48:42.493 に答える
6

continueループの外側があるからです。continueループの次の反復にジャンプし、現在の反復の残りをスキップするためのものです。ただし、そのコードにはループがありません。ケースブロックから抜け出すために必要なのswitchはキーワードですbreak(以下を参照)。

また、すべてのケースブロックを中かっこで囲む必要はありません(ローカルスコープの変数が必要な場合を除く)。

したがって、このようなものがより標準的です。

class swi22
{
    public static void main(String[] args)
    {
        int a=98;
        switch(a)
        {
            default:
                System.out.println("default");
                break;
            case 'b':
                System.out.println(a);
                break;
            case 'a':
                System.out.println(a);
                break;
        }
        System.out.println("Switch Completed");
    }
}

default状態は常に最後にあるべきであると言う考え方の学校もあります。これは必須ではなく、かなり広く使用されている規則です。

于 2010-03-26T07:47:06.323 に答える
1

break代わりに使うべきではありませんcontinueか?

于 2010-03-26T07:46:50.193 に答える
1

continueループの次の反復に直接移動するだけです。

breakループとスイッチから抜け出すために使用されます。

break;の代わりに使用continue;

継続する:

for(x = 0; x < 10; x++)
{
   if(x == 3)
     continue;
   else       
     DoIterativeWork();       
}

スイッチ:

switch(a)
{
 default:{ System.out.println("default"); break;}
 case 'b':{ System.out.println(a); break;}
 case 'a':{ System.out.println(a);}
}
于 2010-03-26T07:49:04.523 に答える
0

continue使用すべき場所を使用していますbreak

于 2010-03-26T07:46:51.517 に答える
-1

continueスイッチの内側??!!! スイッチ内にのみbreak保管できます。

urコードは、

class swi22  
{
     public static void main(String[] args)  
     {  
         int a=98;
         switch(a)
         {
             default:{ System.out.println("default");break;}
             case 'b':{ System.out.println(a); break;}
             case 'a':{ System.out.println(a);}
          }
          System.out.println("Switch Completed");
     }
}
于 2010-03-26T07:46:26.170 に答える