0

出力が 1002 である可能性があるのはなぜですか? 不一致があるにもかかわらず最後のケースが実行されるのはなぜですか?

public class Main {
    public static void main(String[] args) {
        int i=0,j=0;
        switch (i) {
            case 2 : j++;
            default: j+=2;
            case 15 : j+=1000;
        }
        System.out.println("j="+j);
    }
}
4

5 に答える 5

8

フォールスルー:

もう 1 つの興味深い点は、break ステートメントです。各 break ステートメントは、囲んでいる switch ステートメントを終了します。制御フローは、switch ブロックに続く最初のステートメントから続行されます。break ステートメントがないと、switch ブロック内のステートメントが失敗するため、break ステートメントが必要です。一致する case ラベルの後のすべてのステートメントは、後続の case ラベルの式に関係なく、break ステートメントが検出されるまで順番に実行されます。

コードは次のようになります。

  case 2 : j++; break;
  case 4:  j+=10; break;
  default: j+=2; break;
  case 15: j+=1000;
}

FROM DOCS

public class Example{

public static void main(String[] args) {
    java.util.ArrayList<String> futureMonths =
        new java.util.ArrayList<String>();

    int month = 8;

    switch (month) {
        case 1:  futureMonths.add("January");
        case 2:  futureMonths.add("February");
        case 3:  futureMonths.add("March");
        case 4:  futureMonths.add("April");
        case 5:  futureMonths.add("May");
        case 6:  futureMonths.add("June");
        case 7:  futureMonths.add("July");
        case 8:  futureMonths.add("August");
        case 9:  futureMonths.add("September");
        case 10: futureMonths.add("October");
        case 11: futureMonths.add("November");
        case 12: futureMonths.add("December");
        default: break;
    }

    if (futureMonths.isEmpty()) {
        System.out.println("Invalid month number");
    } else {
        for (String monthName : futureMonths) {
           System.out.println(monthName);
        }
    }
}

}

This is the output from the code:

August
September
October
November
December
于 2013-06-07T08:53:05.200 に答える
1

ケース ブロックの最後でブレークする必要があります。それ以外の場合は、後続のすべてのケースも実行されます。

public class Main {
public static void main(String[] args) {
    System.out.println("Hello World!");
    int i=0,j=0;
    switch (i){
        case 2 : j++; break;
        case 4: j+=10; break;
        case 15 : j+=1000; break;
        default: j+=2;
    }
    System.out.println("j="+j);
}
}
于 2013-06-07T08:52:08.150 に答える
0

あなたがいなくなったからbreak;

私があなたの混乱を理解していれば、デフォルトの順序は問題ではありません。以下の場合、

    int i=15,j=0;
    switch (i){
        case 2 : 
            j++;
            break;
        case 4: 
            j+=10;
            break;
        default: 
            j+=2;
            break;
        case 15 : 
            j+=1000;
            break;
    }

j以前にあった1000としても価値がありますdefaultcase 15

于 2013-06-07T08:51:57.433 に答える
-1

それぞれのケースで「break」キーワードが指定されていません。

次のようにする必要があります。

switch (i){
    case 2 : 
    j++;
    break;
    case 4:
    j+=10;
    break;
    case 15 : 
    j+=1000;
    break;
    default: 
    j+=2;
    break;
}
于 2013-06-07T08:53:06.813 に答える
-1

この場合、ケース 2 とケース 4 は実行されませんが、デフォルトとケース 15 は実行されないため、答えは 1002 です。目的の結果を得るには、ブレーク ステートメントを入れてください。

お役に立てれば。

于 2013-06-07T08:55:57.893 に答える