JAVAの初心者向け問題4-☆3:シンプルな電卓アプリケーションを実装しよう
この問題を解くために必要な知識:
【レベル1~3の知識】
コメントの書き方、変数と定数、基本データ型とプリミティブ型、四則演算と論理演算、入力と出力(Scannerクラス)、配列、分岐処理(if、if~else、switch)、繰り返し処理(for、while、do~while)、メソッドの定義と呼び出し、メソッドの戻り値、メソッドのオーバーロード、例外処理(try-catch文、throws、throw)、レベル1と2の知識、コレクションの基礎、コレクション(List, ArrayList)、コレクション(HashSet, TreeSet)、コレクション(HashMap, TreeMap)
【レベル4の知識】
クラスの定義と使用、インスタンス、コンストラクタ、ゲッターとセッター、カプセル化、クラスメンバ、インスタンスメソッド、クラスの継承、抽象クラス、インターフェース
<<前の問題 | 問題集Top |
次の問題>> |
JAVA練習問題4-☆3:シンプルな電卓アプリケーションを実装しよう
シンプルな電卓アプリケーションを作成しましょう。
この電卓は、ユーザーが入力した2つの数字と演算子(+、-、*、/)を使って計算を行います。
計算結果を表示するプログラムを作成してください。
この問題の要件
以下の要件を満たすプログラムを作成してください。
- ユーザーから2つの数字と演算子を入力として受け取ること。
- 入力された演算子に応じて、四則演算を行うメソッド
calculate
を作成すること。 - 結果を出力すること。
- 無効な入力やゼロによる除算に対しては、適切なエラーメッセージを表示すること。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
1つ目の数字を入力してください: 10 2つ目の数字を入力してください: 5 演算子を入力してください (+, -, *, /): / 計算結果: 2.0
----- ↑出力される結果の例↑ -----
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1.import文
1-1. Scannerクラスのインポート
2.SimpleCalculatorクラスの定義
2-1. mainメソッド
2-1-1. Scannerオブジェクトの作成
2-1-1-1. tryブロックの開始
2-1-1-1-1. ユーザーから1つ目の数字を入力させる
2-1-1-1-2. ユーザーから2つ目の数字を入力させる
2-1-1-1-3. ユーザーから演算子を入力させる
2-1-1-1-4. calculateメソッドを呼び出して結果を変数に格納
2-1-1-1-5. 結果を出力する
2-1-1-2. catchブロックの開始
2-1-1-2-1. 無効な入力のエラーメッセージを表示
2-1-1-3. finallyブロックの開始
2-1-1-3-1. Scannerオブジェクトを閉じる
2-2. calculateメソッドの定義
2-2-1. 引数として2つの数字と演算子を受け取る
2-2-2. switch文で演算子に応じた計算を行う
2-2-2-1. ‘+’の場合、足し算を行う
2-2-2-2. ‘-‘の場合、引き算を行う
2-2-2-3. ‘*’の場合、掛け算を行う
2-2-2-4. ‘/’の場合、割り算を行う
2-2-2-4-1. num2がゼロの場合、ArithmeticExceptionをスロー
2-2-2-5. その他の場合、IllegalArgumentExceptionをスロー
2-2-3. 計算結果を返す
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
import java.util.Scanner; public class SimpleCalculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); try { // ユーザーから2つの数字と演算子を入力させる System.out.print("1つ目の数字を入力してください: "); // ***ここに1つ目の数字を入力させるコードを書いてください*** double num1 = scanner.nextDouble(); System.out.print("2つ目の数字を入力してください: "); // ***ここに2つ目の数字を入力させるコードを書いてください*** double num2 = scanner.nextDouble(); System.out.print("演算子を入力してください (+, -, *, /): "); // ***ここに演算子を入力させるコードを書いてください*** char operator = scanner.next().charAt(0); // ***ここにcalculateメソッドを呼び出して結果を変数に格納するコードを書いてください*** double result = calculate(num1, num2, operator); // 結果を出力する System.out.println("計算結果: " + result); } catch (Exception e) { // ***ここに無効な入力のエラーメッセージを表示するコードを書いてください*** System.out.println("無効な入力です。もう一度試してください。"); } finally { // ***ここにScannerオブジェクトを閉じるコードを書いてください*** scanner.close(); } } // 四則演算を行うメソッド public static double calculate(double num1, double num2, char operator) { double result; switch (operator) { case '+': // ***ここに足し算の結果をresultに代入するコードを書いてください*** result = num1 + num2; break; case '-': // ***ここに引き算の結果をresultに代入するコードを書いてください*** result = num1 - num2; break; case '*': // ***ここに掛け算の結果をresultに代入するコードを書いてください*** result = num1 * num2; break; case '/': if (num2 == 0) { // ***ここにゼロで割ることを防ぐための例外を投げるコードを書いてください*** throw new ArithmeticException("ゼロで割ることはできません。"); } // ***ここに割り算の結果をresultに代入するコードを書いてください*** result = num1 / num2; break; default: // ***ここに無効な演算子に対する例外を投げるコードを書いてください*** throw new IllegalArgumentException("無効な演算子です。"); } return result; } }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
********************
import java.util.Scanner; public class SimpleCalculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); try { // ユーザーから2つの数字と演算子を入力させる System.out.print("1つ目の数字を入力してください: "); double num1 = scanner.nextDouble(); System.out.print("2つ目の数字を入力してください: "); double num2 = scanner.nextDouble(); System.out.print("演算子を入力してください (+, -, *, /): "); char operator = scanner.next().charAt(0); // 計算結果を取得 double result = calculate(num1, num2, operator); // 結果を出力する System.out.println("計算結果: " + result); } catch (Exception e) { System.out.println("無効な入力です。もう一度試してください。"); } finally { scanner.close(); } } // 四則演算を行うメソッド public static double calculate(double num1, double num2, char operator) { double result; switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': if (num2 == 0) { throw new ArithmeticException("ゼロで割ることはできません。"); } result = num1 / num2; break; default: throw new IllegalArgumentException("無効な演算子です。"); } return result; } }
********************
コードの解説
このJavaコードは、2つの数字と演算子をユーザーから入力し、基本的な四則演算(加算、減算、乗算、除算)を実行するシンプルな電卓プログラムです。
各部分の詳細を初心者向けに解説します。
Scanner
クラスのインポートと使用
Scanner scanner = new Scanner(System.in);
Scanner
クラスは、ユーザーからの入力を受け取るために使用します。
このプログラムでは、数値と演算子を入力させるために使われています。
System.in
は、標準入力(通常はキーボード)を指定しています。
ユーザーからの入力
System.out.print("1つ目の数字を入力してください: "); double num1 = scanner.nextDouble(); System.out.print("2つ目の数字を入力してください: "); double num2 = scanner.nextDouble(); System.out.print("演算子を入力してください (+, -, *, /): "); char operator = scanner.next().charAt(0);
System.out.print
は、メッセージを表示するために使用されています。ユーザーに入力を促すためのメッセージです。scanner.nextDouble()
は、ユーザーから入力された値を読み取り、それをdouble
型の数値として取得します。このプログラムでは、2つの数値を入力させています。scanner.next().charAt(0)
は、演算子(+
,-
,*
,/
)を1文字目として取得します。
四則演算を行うメソッド calculate
public static double calculate(double num1, double num2, char operator) { double result; switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': if (num2 == 0) { throw new ArithmeticException("ゼロで割ることはできません。"); } result = num1 / num2; break; default: throw new IllegalArgumentException("無効な演算子です。"); } return result; }
calculate
メソッドは、2つの数値(num1
とnum2
)と演算子(operator
)を受け取り、それに基づいて計算を行います。switch
文を使って、演算子が+
、-
、*
、/
のいずれかであるかを判定し、それぞれに応じた計算を行います。- 除算の場合、
num2
が0だとエラーになるため、if
文を使って0で割ろうとした場合に例外(ArithmeticException
)を投げます。 default
は、無効な演算子が入力された場合にエラーを発生させるために使用されます(IllegalArgumentException
)。
エラーハンドリング(例外処理)
try { // 計算処理 } catch (Exception e) { System.out.println("無効な入力です。もう一度試してください。"); } finally { scanner.close(); }
try
ブロックでは、ユーザーからの入力に基づいて計算処理を行います。もし、入力が無効な場合(例えば、数字の代わりに文字が入力された場合や無効な演算子が入力された場合)、Exception
が発生します。catch (Exception e)
は、エラーが発生したときに実行されます。この場合、エラーメッセージとして「無効な入力です。もう一度試してください。」と表示されます。finally
ブロックは、例外が発生したかどうかに関わらず、必ず実行される部分で、ここではscanner.close()
によってScanner
オブジェクトを閉じています。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。