JavaRush /Java Blog /Random-JA /Java での分岐

Java での分岐

Random-JA グループに公開済み
この記事では、一般的なコンピュータ プログラムと Java で書かれたプログラムにおける分岐の概念を見ていきます。次のような制御構造について話しましょう。
  • if-then(またはif
  • if-then-else(またはif-else
  • switch-case
Java での分岐 - 1

分岐

基本的な概念から始めましょう。プログラムとは、コンピュータによって実行される一連のコマンドです。ほとんどの場合、コマンドは順番に実行されます。プログラム コマンドの一連のフローを変更する必要がある場合は、それほど頻繁ではありません (それでもかなりの頻度で) 状況が発生します。特定の条件によっては、別のコマンドの代わりに 1 つのコマンド ブロックを実行する必要がある場合があります。そして、これらの状況が変化したときは、その逆のことを行います。たとえば、18 歳未満の人のアクセスが禁止されているサイトは数多くあります。通常、このようなリソースに初めてアクセスすると、年齢制限について警告され、生年月日の入力を求められる何らかのフォームがユーザーに表示されます。その後、ユーザーが入力したデータに応じて、リソースへの入力が許可されるかどうかが決まります。この機能は、一般に分岐と呼ばれるものによって提供されます。別のたとえをしてみましょう。七つの道の交差点に立っている自分を想像してみましょう。私たちは、左か右に曲がるか、それとも直進するかという選択を迫られています。私たちの選択は特定の条件に基づいています。また、同時に複数の道を通る機会もありません。それらの。状況によっては、どちらかの道を選ばなければなりません。同じ原理が分岐にも当てはまります。ここで、分岐の定義を与えてみましょう。分岐は、ある条件の真偽に応じて、いくつかの一連のアクションのうちの 1 つが実行されるアルゴリズムの構造です。分岐は (おそらく) すべてのプログラミング言語で実装されています。Java プログラミング言語には、プログラムに分岐を実装できる、いわゆる制御構造がいくつかあります。プログラミング言語にはそのような構造が 3 つあります。
  • オペレーターif-then
  • オペレーターif-then-else
  • 三項演算子? :
if-elseこの記事では、と演算子について説明しますswitch-case

もし、それから

Operator if-then、またはifおそらく最も一般的な演算子。「はい、1 の場合を書いてください」という表現はすでに普及しています。演算子はif次の構造を持っています。
if (bool_condition) {
	statement
}
この設計では:
  • bool_conditiontrue または false に評価されるブール式です。この式を条件と呼びます。
  • statement— 条件が true の場合に実行する必要があるコマンド (複数の場合があります) ( bool_statement==true)
この構造は次のように読み取ることができます。

Если (bool_condition), то {statement}
ここではいくつかの例を示します。
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    }
}
このプログラムでは、ユーザーはスマートフォンのバッテリー充電の割合を入力するように求められます。充電残量が 10% 未満の場合、プログラムはスマートフォンを充電する必要があることをユーザーに警告します。これは最も単純なデザインの例ですif。変数「a」が 10 以上の場合は何も起こらないことに注意してください。プログラムは、 に続くコードを引き続き実行しますif。また、この場合、コンストラクトには、if実行するアクションのシーケンスが 1 つだけあることにも注意してください。テキストを印刷するか、何も実行しません。これは、1 つの「分岐」による分岐のバリエーションです。これは場合によっては必要です。たとえば、誤った価値観から身を守りたいとき。たとえば、文字列が の場合、文字列内の文字数を知ることはできませんnull。以下の例:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    }
}
main メソッドを実行した結果、コンソールに次のように出力されます。

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
を確認したおかげでstring != null、プログラムのエラーを回避することができました。変数がstringに等しい場合には何もしませんnull

if-then-else

通常の状況で、ifプログラムに「何かをするか、何もしないか」という選択肢がある場合、if-elseプログラムを選択するときは、結局は「何かをするか、別のことをする」ということになります。「何もしない」という選択肢は消えます。このタイプの分岐には、2 つ以上の実行 (または分岐の数) のバリエーションがあります。選択肢が 2 つある場合を考えてみましょう。この場合、制御構造は次の形式になります。
if (bool_condition) {
	statement1
} else {
	statement2
}
ここ:
  • bool_statementtrue または false に評価されるブール式です。この式を条件と呼びます。
  • statement1— 条件が true の場合に実行する必要があるコマンド (複数の場合があります) ( bool_statement==true)
  • statement2— 条件が false の場合に実行する必要があるコマンド (複数の場合があります) ( bool_statement==false)
この構造は次のように読み取ることができます。

Если (bool_condition), то {statement1}
Иначе {statement2}
以下に例を示します。
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    } else {
        System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
    }
}
スマートフォンのバッテリー残量についても同様の例です。前回のプログラムではスマートフォンの充電の必要性について警告するだけでしたが、今回は追加の通知があります。これを見てみましょうif:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
a < 10true (バッテリーレベルが 10 未満) の場合、プログラムは 1 つのテキストを印刷します。そうしないと、条件a < 10が満たされない場合、プログラムはまったく異なるテキストを出力します。1 行の文字数を表示する 2 番目の例も完成させましょう。前回は、渡された文字列が に等しい場合、プログラムは何も出力しませんでしたnullif通常のものを次のように変更して、これを修正しましょうif-else
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    } else {
        System.out.println("Ошибка! Переданная строка равна null!");
    }
}
このメソッドでは、printStringSize構造にifブロックを追加しましたelse。ここでプログラムを実行すると、入力 (メソッドmain) は前回と同じですが、コンソールに 2 行ではなく 4 行出力されます。プログラムが出力するテキスト:

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
else状況の後に実行コマンドが続くのではなく、別の が続く 場合は、その状況は許容されますif。次に、構築は次の形式になります。
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
この設計にはいくつかの条件があります。
  • bool_condition1
  • bool_condition2
  • bool_conditionN
このような条件の数に制限はありません。各条件には独自のコマンドがあります。
  • ステートメント1
  • ステートメント2
  • ステートメントN
それぞれにstatement1 行以上のコードを含めることができます。条件を一つ一つチェックしていきます。最初の真の条件が決定されると、その真の条件に「関連付けられた」一連のコマンドが実行されます。ifこれらのコマンドを実行すると、この先にさらにチェックがある場合でも、プログラムはブロックを終了します。式「statementN+1」は、上記で定義された条件がいずれも当てはまらない場合に実行されます。この構造は次のように読み取ることができます。

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
この場合の最後の行はオプションです。最後の孤独なものはなくても大丈夫ですelse。そして、デザインは次のような形になります。
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
そして、それは次のようになります:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
したがって、どの条件にも当てはまらない場合、コマンドは 1 つも実行されません。例に移りましょう。スマートフォンの充電レベルの状況に戻りましょう。所有者にデバイスの充電レベルについてさらに詳しく通知するプログラムを書いてみましょう。
public static void main(String[] args) {
    String alert5 = "Я скоро отключусь, но помни меня бодрым";
    String alert10 = "Я так скучаю по напряжению в моих жилах";
    String alert20 = "Пора вспоминать, где лежит зарядка";
    String alert30 = "Псс, пришло время экономить";
    String alert50 = "Хм, больше половины израсходовали";
    String alert75 = "Всё в порядке, заряда больше половины";
    String alert100 = "Я готов к приключениям, если что..";
    String illegalValue = "Такс, кто-то ввел некорректное meaning";

    Scanner scanner = new Scanner(System.in);
    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a <= 0 || a > 100) {
        System.out.println(illegalValue);
    } else if (a < 5) {
        System.out.println(alert5);
    } else if (a < 10) {
        System.out.println(alert10);
    } else if (a < 20) {
        System.out.println(alert20);
    } else if (a < 30) {
        System.out.println(alert30);
    } else if (a < 50) {
        System.out.println(alert50);
    } else if (a < 75) {
        System.out.println(alert75);
    } else if (a <= 100) {
        System.out.println(alert100);
    }
}
たとえば、この場合、ユーザーが 15 を入力すると、プログラムは画面に「充電器がどこにあるか覚えておく時間です」と表示します。15 が少なく、30 と 50、75 と 100 であるにもかかわらず、画面上の出力は 1 だけになります。コンソールに曜日を出力する別のアプリケーションを作成しましょう。
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    if (dayOfWeek == DayOfWeek.SUNDAY) {
        System.out.println("Сегодня воскресенье");
    } else if (dayOfWeek == DayOfWeek.MONDAY) {
        System.out.println("Сегодня понедельник");
    } else if (dayOfWeek == DayOfWeek.TUESDAY) {
        System.out.println("Сегодня вторник");
    } else if (dayOfWeek == DayOfWeek.WEDNESDAY) {
        System.out.println("Сегодня среда");
    } else if (dayOfWeek == DayOfWeek.THURSDAY) {
        System.out.println("Сегодня четверг");
    } else if (dayOfWeek == DayOfWeek.FRIDAY) {
        System.out.println("Сегодня пятница");
    } else if (dayOfWeek == DayOfWeek.SATURDAY) {
        System.out.println("Сегодня суббота");
    }
}
もちろん便利ですが、単調な文字が多いと少し目がくらんでしまいます。多数のオプションがある状況では、後述する演算子を使用することをお勧めします。

スイッチケース

if多くの分岐を含む太字の代わりに、演算子を使用できますswitch-case。この演算子は、「この変数があります。」と言っているように見えます。見てください、その値が「x」に等しい場合は、これとこれを行います。その値が「y」に等しい場合は、別の方法で行います。そして、上記のいずれにも等しくない場合は、単に次のことを行います。この演算子は次のような構造になっています。
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
この構造をさらに詳しく見てみましょう。 argument は変数であり、その値を仮説上のさまざまなオプションと比較します。変数は である必要がありますfinalswitchまた、演算子は引数としてデータ型をサポートしていないことにも注意してください。有効なタイプを以下に示します。
  • バイトとバイト
  • 短くて短い
  • int と整数
  • 文字と文字
  • 列挙型
case value1 (value2, valueN)- これらは値であり、変数の値を比較するための特定の定数ですargument。また、それぞれのケースで、実行する必要がある一連のコマンドが定義されます。 statement1statement2、は、のいずれかに等しいことが判明したstatementN場合に実行する必要があるコマンドです。たとえば、に等しい場合、プログラムは を実行します。 および は「デフォルト値」です。提示されたもののいずれとも等しくない場合、分岐がトリガーされ、コマンドが実行されます。 および は、演算子のオプションの属性です。 — 各 case ブロックの最後にステートメントがあることがわかります。この演算子もオプションであり、さまざまなケースのコードを区別するために役立ちます。場合によっては、異なるケースで同じアクションを実行する必要がある場合があります。その場合、これらのケースを組み合わせることができます。この場合、キーワードは省略され、演算子の構造は次のようになります。 argumentvalueargumentvalue2statement2defaultdefault_statementargumentvaluedefaultdefault_statementdefaultdefault_statementswitch-casebreakbreakbreakswitch-case
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
`case valueX:` と `case valueY:` の間に演算子がないことに注意してくださいbreak。ここで、argumentに等しい場合value1、 が実行されますstatement1valueXそして、引数がいずれかに等しい場合valueYstatementXY。わかりにくい理論をわかりやすい実践に落とし込んでみましょう。演算子 を使用して曜日を指定して例を書き直してみましょうswitch-case
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
            System.out.println("Сегодня воскресенье");
            break;
        case MONDAY:
            System.out.println("Сегодня понедельник");
            break;
        case TUESDAY:
            System.out.println("Сегодня вторник");
            break;
        case WEDNESDAY:
            System.out.println("Сегодня среда");
            break;
        case THURSDAY:
            System.out.println("Сегодня четверг");
            break;
        case FRIDAY:
            System.out.println("Сегодня пятница");
            break;
        case SATURDAY:
            System.out.println("Сегодня суббота");
            break;
    }
}
それでは、演算子 を使用して、今日が平日か週末かを表示するプログラムを作成してみましょうswitch-case
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
        case SATURDAY:
            System.out.println("Сегодня выходной");
            break;
        case FRIDAY:
            System.out.println("Завтра выходной");
            break;
        default:
            System.out.println("Сегодня рабочий день");
            break;

    }
}
少し説明させてください。このプログラムではenum DayOfWeek、現在の曜日を示す を取得します。次に、変数の値がいずれかのdayOfWeek値と等しいかどうかを確認します。この場合、プログラムは「今日は休みです。」と表示します。そうでない場合は、変数の値が の値と等しいかどうかを確認します。この場合、プログラムは「明日は休みです」と表示します。この場合、何もない場合、選択肢はほとんどありません。残りの日は平日です。そのため、デフォルトでは、今日が金曜日、土曜日、日曜日でない場合、プログラムは「今日は就業日です」と表示します。 SUNDAYSATURDAYdayOfWeekFRIDAY

結論

そこで、この記事では、コンピューター プログラムにおける分岐とは何かについて考察しました。また、Java で分岐を実装するためにどのような制御構造が使用されているかもわかりました。次のようなデザインについて話し合いました。
  • if-then
  • if-then-else
  • switch-case
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION