スーパークラス、サブクラスを作成し、各操作をするプログラム 電卓で関数演算

スーパークラス、サブクラスを作成し、各操作をするプログラム 電卓で関数演算

練習問題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
メンバメソッド:

  • public double add(double a, double b) 機能:a+bの値を返す
  • public double subtract(double a, double b) 機能:a-bの値を返す
  • public double multiple(double a, double b) 機能:a×bの値を返す
  • public void displayFunctions() 機能:扱える計算の全種類を表示する

     

    クラス:ScientificCalculator (extends Calculator)
    メンバメソッド:

  • public double sin(double a) 機能:a[°]の正弦の値を返す
  • public double cos(double a) 機能:a[°]の余弦の値を返す
  • public double tan(double a) 機能:a[°]の正接の値を返す
  • public double power(double a, double b) 機能:aのb乗の値を返す
  • public void displayFunctions() 機能:扱える計算の全種類を表示する

     

    クラス:ren13_5.java(メインのクラス)
     電卓と関数電卓のインスタンスを1個ずつ生成して、機能と計算の種類を番号で選択させる。

     

  • 解答例

    class Calculator {

     

    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:乗算");
    }

     

    }

    class ScientificCalculator extends Calculator {

     

    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:累乗");
    }

     

    }

    import java.io.*;

     

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

     

    }