1. ホーム

[解決済み】1つのswitch case文に2つの値を使用する場合

2022-03-24 12:59:16

質問

私のコードでは、ユーザーが入力したテキストに応じて、プログラムが何かを行います。私のコードは次のようなものです。

switch (name) {
        case text1: {
            //blah
            break;
        }
        case text2: {
            //blah
            break;
        }
        case text3: {
            //blah
            break;
        }
        case text4: {
            //blah
            break;
        }

しかし、ケース内のコード text1text4 は同じです。そこで、次のような実装ができないかと考えていました。

case text1||text4: {
            //blah
            break;
        }

は知っているのですが || 演算子は使えないのですが、何か似たようなものはないでしょうか?

どのように解決するのですか?

の両方を使用することができます。 CASE ステートメントを次のように使用します。

  case text1: 
  case text4:{
            //blah
            break;
        }

SEE THIS EXAMPLE:このコード例は、特定の月の日数を計算するものです。

class SwitchDemo {
    public static void main(String[] args) {

        int month = 2;
        int year = 2000;
        int numDays = 0;

        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                numDays = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                numDays = 30;
                break;
            case 2:
                if (((year % 4 == 0) && 
                     !(year % 100 == 0))
                     || (year % 400 == 0))
                    numDays = 29;
                else
                    numDays = 28;
                break;
            default:
                System.out.println("Invalid month.");
                break;
        }
        System.out.println("Number of Days = "
                           + numDays);
    }
}

これは、このコードからの出力です。

Number of Days = 29

FALLTHROUGH(フォールスラフ)。

<ブロッククオート

もう一つの注目点は、break文である。それぞれのbreak文は で囲まれているswitch文を終了させます。制御フローは スイッチブロックに続く最初のステートメント ブレークステートメント が必要なのは、これがないとswitchブロックのステートメントが fall through : 一致するケースラベル以降のすべてのステートメントが順番に実行されます。 の順に、後続のケースラベルの表現に関係なく、表示されます。 break文に遭遇するまで。

サンプルコードです。

public class SwitchFallThrough {

    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);
            }
        }
    }
}

これは、このコードからの出力です。

August
September
October
November
December

switchステートメントで文字列を使用する

Java SE 7以降では、switchの中でStringオブジェクトを使用することができます。 文の式になります。次のコード例では、, の値に基づいて、その月の番号を表示します。 という名前の月があります。

public class StringSwitchDemo {

    public static int getMonthNumber(String month) {

        int monthNumber = 0;

        if (month == null) {
            return monthNumber;
        }

        switch (month.toLowerCase()) {
            case "january":
                monthNumber = 1;
                break;
            case "february":
                monthNumber = 2;
                break;
            case "march":
                monthNumber = 3;
                break;
            case "april":
                monthNumber = 4;
                break;
            case "may":
                monthNumber = 5;
                break;
            case "june":
                monthNumber = 6;
                break;
            case "july":
                monthNumber = 7;
                break;
            case "august":
                monthNumber = 8;
                break;
            case "september":
                monthNumber = 9;
                break;
            case "october":
                monthNumber = 10;
                break;
            case "november":
                monthNumber = 11;
                break;
            case "december":
                monthNumber = 12;
                break;
            default: 
                monthNumber = 0;
                break;
        }

        return monthNumber;
    }

    public static void main(String[] args) {

        String month = "August";

        int returnedMonthNumber =
            StringSwitchDemo.getMonthNumber(month);

        if (returnedMonthNumber == 0) {
            System.out.println("Invalid month");
        } else {
            System.out.println(returnedMonthNumber);
        }
    }
}

このコードからの出力は8です。

FROM Java ドキュメント