【プログラミングしてみよう12】Javaのswitch文で簡単な電卓を作ろう

Java

前回は例外処理(try-catch)を学び、これでJavaの基礎的な文法を一通り学んだことになります。 今回はこれまでの内容を組み合わせた応用編として、「switch文」という新しい構文を紹介しながら、簡単な電卓プログラムを作っていきます。

switch文の基本

これまで条件分岐にはif文を使ってきましたが、ひとつの変数の値によって処理を細かく分けたい場合、if文を何度も書くと長くなりがちです。

if (operator.equals("+")) {
    // 処理
} else if (operator.equals("-")) {
    // 処理
} else if (operator.equals("*")) {
    // 処理
}

こうした「ひとつの値によって処理を分岐させたい」場合に便利なのが「switch文」です。

switch (変数) {
    case 値1:
        // 処理
        break;
    case 値2:
        // 処理
        break;
    default:
        // どの値にも当てはまらない場合の処理
}

case で値ごとの処理を書き、break でswitch文を抜けます。break を書き忘れると、次の case の処理までそのまま実行されてしまうので注意が必要です。どの case にも当てはまらない場合は default の処理が実行されます。

サンプルコード(電卓プログラム)

ファイル作成

「Java02」フォルダに CalculatorTest.java という名前でファイルを作成します

コード入力

以下のコードを入力します。

import java.util.Scanner;

public class CalculatorTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("1つ目の数値を入力してください:");
        double num1 = sc.nextDouble();

        System.out.print("演算子を入力してください(+ - * /):");
        String operator = sc.next();

        System.out.print("2つ目の数値を入力してください:");
        double num2 = sc.nextDouble();

        double result = 0;
        boolean isValid = true;

        try {
            switch (operator) {
                case "+":
                    result = num1 + num2;
                    break;
                case "-":
                    result = num1 - num2;
                    break;
                case "*":
                    result = num1 * num2;
                    break;
                case "/":
                    result = num1 / num2;
                    break;
                default:
                    System.out.println("エラー:不明な演算子です");
                    isValid = false;
            }

            if (isValid) {
                System.out.println(num1 + " " + operator + " " + num2 + " = " + result);
            }
        } catch (ArithmeticException e) {
            System.out.println("エラー:0で割ることはできません");
        }

        sc.close();
    }
}

コンパイル

javac CalculatorTest.java

実行

java CalculatorTest

次にターミナルに数値と演算子を入力します。

1つ目の数値を入力してください:10
演算子を入力してください(+ - * /):*
2つ目の数値を入力してください:4

実行結果は次のようになります。

10.0 * 4.0 = 40.0

コードの解説

switch (operator) の部分で、入力された演算子の文字列によって処理を分岐させています。case "+": のように、それぞれの演算子に対応する計算を書き、計算後は break; でswitch文を抜けています。

default: の部分には、+ - * / 以外の文字が入力された場合の処理を書いています。今回は isValid という boolean 型の変数を false にすることで、その後の計算結果の表示をスキップするようにしています。

割り算の case "/": では、num2 が0だった場合に例外が発生する可能性があります。そこで、switch文全体を前回学んだ try ブロックで囲み、catch (ArithmeticException e) でゼロ除算のエラーをキャッチしています。これにより、0で割るような入力があってもプログラムが強制終了することなく、エラーメッセージを表示して安全に終了できます。

このプログラムは、これまで学んできた要素の組み合わせでできています。Scannerでユーザーからの入力を受け取り、switch文で処理を分岐し、try-catchで例外に備えるという流れは、実際のアプリ開発でもよく使われる組み合わせです。

応用として、while文 と組み合わせれば「終了するまで何度も計算を繰り返す電卓」にすることもできます。

String continueFlag = "y";
while (continueFlag.equals("y")) {
    // 計算処理
    System.out.print("続けますか?(y/n):");
    continueFlag = sc.next();
}

このように、これまで学んだ繰り返し処理と組み合わせることで、より実用的なプログラムへと発展させることができます。

まとめ

switch文を使うことで、ひとつの変数の値によって処理を分岐させる際に、if文よりもすっきりとしたコードを書けるようになります。case ごとに処理を書き、break で抜けるという基本の形と、break を忘れると次の case まで実行されてしまう点をしっかり覚えておきましょう。今回の電卓プログラムは、Scanner・switch文・try-catchという、これまで学んできた要素を組み合わせたものです。

2026/06/21(日) ぱんまる

コメント

タイトルとURLをコピーしました