スーパークラス、サブクラスを作成し、各操作をするプログラム 電卓で関数演算
練習問題5
電卓を表すスーパークラスCalculator、関数電卓を表すサブクラスScientificCalculatorを作成し、各操作ができるプログラムを作成する。
実行画面
普通電卓(1), 関数電卓(2), 終了(他)>1【enterキー】
計算の種類を入力して下さい
1:加算, 2:減算, 3:乗算 > 2【enterキー】
2つの実数を入力して下さい
実数1 > 4.5【enterキー】
実数2 > 6【enterキー】
答え:-1.5
使用する電卓の番号を入力して下さい
普通電卓(1), 関数電卓(2), 終了(他)>2【enterキー】
計算の種類を入力して下さい
1:加算, 2:減算, 3:乗算, 4:正弦, 5:余弦, 6:正接, 7:累乗 > 6【enterキー】
角度を入力して下さい > 135【enterキー】
答え:-1.0000000000000002
使用する電卓の番号を入力して下さい
普通電卓(1), 関数電卓(2), 終了(他)>1【enterキー】
計算の種類を入力して下さい
1:加算, 2:減算, 3:乗算 > 4【enterキー】
計算の種類が間違っています
使用する電卓の番号を入力して下さい
普通電卓(1), 関数電卓(2), 終了(他)>2
計算の種類を入力して下さい
1:加算, 2:減算, 3:乗算, 4:正弦, 5:余弦, 6:正接, 7:累乗 > 7【enterキー】
2つの実数を入力して下さい
実数1 > 2.5【enterキー】
実数2 > 2【enterキー】
答え:6.25
使用する電卓の番号を入力して下さい
普通電卓(1), 関数電卓(2), 終了(他)>0【enterキー】
クラス:Calculator
メンバメソッド:
クラス:ScientificCalculator (extends Calculator)
メンバメソッド:
クラス:ren13_5.java(メインのクラス)
電卓と関数電卓のインスタンスを1個ずつ生成して、機能と計算の種類を番号で選択させる。
解答例
public double add(double a, double b) {
return a+b;
}
public double subtract(double a, double b) {
return a-b;
}
public double multiple(double a, double b) {
return a*b;
}
public void displayFunctions() {
System.out.print("1:加算, 2:減算, 3:乗算");
}
}
public double sin(double a) {
return Math.sin(Math.toRadians(a));
}
public double cos(double a) {
return Math.cos(Math.toRadians(a));
}
public double tan(double a) {
return Math.tan(Math.toRadians(a));
}
public double power(double a, double b) {
return Math.pow(a, b);
}
public void displayFunctions() {
super.displayFunctions();
System.out.print(", 4:正弦, 5:余弦, 6:正接, 7:累乗");
}
}
public class ren13_5 {
public static double a, b; // 計算する入力値を一時的に格納するためのフィールド変数
public static BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
public static void main(String[] args) throws IOException {
Calculator calc = new Calculator();
ScientificCalculator s_calc = new ScientificCalculator();
System.out.println("使用する電卓の番号を入力して下さい");
System.out.print("普通電卓(1), 関数電卓(2), 終了(他)>");
int n = Integer.parseInt(br.readLine());
int type;
while( 1 <= n && n <= 2) {
switch( n ) {
case 1:
System.out.println("計算の種類を入力して下さい");
calc.displayFunctions();
System.out.print(" > ");
type = Integer.parseInt(br.readLine());
switch(type) {
case 1:
// a, b 2つの入力値を読み込む
inputTwoValues();
System.out.println("答え:" + calc.add(a, b));
break;
case 2:
// a, b 2つの入力値を読み込む
inputTwoValues();
System.out.println("答え:" + calc.subtract(a, b));
break;
case 3:
// a, b 2つの入力値を読み込む
inputTwoValues();
System.out.println("答え:" + calc.multiple(a, b));
break;
default:
System.out.println("計算の種類が間違っています");
break;
}
break;
case 2:
System.out.println("計算の種類を入力して下さい");
s_calc.displayFunctions();
System.out.print(" > ");
type = Integer.parseInt(br.readLine());
switch(type) {
case 1:
// a, b 2つの入力値を読み込む
inputTwoValues();
System.out.println("答え:" + s_calc.add(a, b));
break;
case 2:
// a, b 2つの入力値を読み込む
inputTwoValues();
System.out.println("答え:" + s_calc.subtract(a, b));
break;
case 3:
// a, b 2つの入力値を読み込む
inputTwoValues();
System.out.println("答え:" + s_calc.multiple(a, b));
break;
case 4:
// aの値を読み込む
inputAngle();
System.out.println("答え:" + s_calc.sin(a));
break;
case 5:
// aの値を読み込む
inputAngle();
System.out.println("答え:" + s_calc.cos(a));
break;
case 6:
// aの値を読み込む
inputAngle();
System.out.println("答え:" + s_calc.tan(a));
break;
case 7:
// a, b 2つの入力値を読み込む
inputTwoValues();
System.out.println("答え:" + s_calc.power(a, b));
break;
default:
System.out.println("計算の種類が間違っています");
break;
}
break;
}
System.out.println();
System.out.println("使用する電卓の番号を入力して下さい");
System.out.print("普通電卓(1), 関数電卓(2), 終了(他)>");
n = Integer.parseInt(br.readLine());
}
}
// 角度(a)を読み込むためのクラスメソッド
public static void inputAngle() throws IOException {
System.out.print("角度を入力して下さい > ");
a = Double.parseDouble(br.readLine());
}
// a, b 2つの入力値を読み込むためのクラスメソッド
public static void inputTwoValues() throws IOException {
System.out.println("2つの実数を入力して下さい");
System.out.print("実数1 > ");
a = Double.parseDouble(br.readLine());
System.out.print("実数2 > ");
b = Double.parseDouble(br.readLine());
}
}