LoginSignup
shun03
@shun03

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Javaのコンストラクタについて

解決したいこと

Javaの課題で、Calcクラスにコンストラクタを導入したいです。
理由としてはinitメソッドを使って合計値を初期化するためです。
その前にinitメソッドを同クラスにどのように書けばいいかも分かりません。
以下のソースコードからどのように書けばいいか解決方法を教えてください。

該当するソースコード

package com.lupinus_ltd;

public class Calc {

    private int total;

        public void add(int operand1,int operand2) {
            System.out.println(operand1 + "+" + operand2 + "=" + (operand1 + operand2));
        }
        public void sub(int operand1, int operand2) {
            System.out.println(operand1 + "-" + operand2 + "=" + (operand1 - operand2));
        }
        public void multi(int operand1, int operand2) {
            System.out.println(operand1 + "*" + operand2 + "=" + (operand1 * operand2));
        }       
        public void div(int operand1, int operand2) {
            System.out.println(operand1 + "/" + operand2 + "=" + ((double)operand1 / (double)operand2));
        }       
        public void mod(int operand1, int operand2) {
            System.out.println(operand1 + "%" + operand2 + "=" + (operand1 % operand2));
        }       
        public void pow(int operand1, int operand2) {
            System.out.println(operand1 + "^" + operand2 + "=" + (operand1 ^ operand2));
        }
}

念の為、メインクラス(kadai4)のソースも貼ります。

import com.lupinus_ltd.Calc;

public class kadai4 {


    public static void main(String[]args) {

        int operand1 = Integer.parseInt(args[0]);
        String operator = args[1];
        int operand2 = Integer.parseInt(args[2]);

        Calc c = new Calc();
    try {
        switch(operator) {
        case "+":
            c.add(operand1,operand2);
            break;
        case "-":
            c.sub(operand1,operand2);
            break;
        case "*":
            c.multi(operand1,operand2);
            break;
        case "/":
            c.div(operand1,operand2);
            break;
        case "%":
            c.mod(operand1,operand2);
            break;
        case "^":
            c.pow(operand1,operand2);
            break;
        }

    }catch(NumberFormatException e) {
            System.out.println("入力値が数値ではありません");
        }
    }
}

0

2Answer

合計値を初期化したいとありますが、そもそもその合計値であろうtotalをどの場所でも呼び出していないみたいですね。
コンストラクタとinitメソッドの必要性を感じないのですが。

1

Comments

  1. @shun03

    Questioner
    大変申し訳ございません。

    以下のようにソースを書き直しましたのでもう一度確認をお願いします。

    package com.lupinus_ltd;

    public class Calc {

    private int total;
    public Calc () {

    }


    public void add(int operand1,int operand2) {
    total = operand1 + operand2;
    }
    public void sub(int operand1,int operand2) {
    System.out.println(operand1 + "-" + operand2 + "=" + (total));
    }
    public void multi(int operand1,int operand2) {
    System.out.println(operand1 + "*" + operand2 + "=" + (total));
    }
    public void div(int operand1,int operand2) {
    System.out.println(operand1 + "/" + operand2 + "=" + (total));
    }
    public void mod(int operand1,int operand2) {
    System.out.println(operand1 + "%" + operand2 + "=" + (total));
    }

    public int getTotal() {

    return total;
    }

    public void init() {

    }

    }
  2. フィールドで宣言してあるtotalに予め0を初期値として代入しておいて、初期化したい時にinitメソッドを呼び出せば良いのでいずれにせよコンストラクタの出る幕はなさそうですよ〜

    とりあえずtotalというフィールドに対して任意の初期値を与えるという体で、コンストラクタの使い方は後ほど記述します。
Calc.java
package com.lupinus_ltd;

public class Calc {

    private int total;

    //Calcクラスのコンストラクタ
    //インスタンス生成時に一度だけ実行されます
    public Calc (int total) {
        //引数で受け取った数値をフィールドのtotalに代入
        this.total = total;
    }

    //計算用メソッド
    public void add(int operand1,int operand2) {
        total = operand1 + operand2;
    }
    public void sub(int operand1,int operand2) {
        System.out.println(operand1 + "-" + operand2 + "=" + (total));
    }
    public void multi(int operand1,int operand2) {
        System.out.println(operand1 + "*" + operand2 + "=" + (total));
    }
    public void div(int operand1,int operand2) {
        System.out.println(operand1 + "/" + operand2 + "=" + (total));
    }
    public void mod(int operand1,int operand2) {
        System.out.println(operand1 + "%" + operand2 + "=" + (total));
    }

    //totalを戻り値として渡すメソッド
    public int getTotal() {
        return total;
    }

    //totalを初期化するメソッド
    public void init() {
        total = 0;
    }
}

あえて書くならこんな感じでしょうか。
totalとしての意味をなしませんが、一応

Calc c = new Calc(20);

とメインメソッド内でCalcクラスのインスタンスを生成しつつ引数に数値を渡したら
Calcインスタンスのフィールドに20が代入されます。

1

Comments

  1. @shun03

    Questioner
    丁寧に説明していただきありがとうございます。
    今回教えられたことは忘れずバックアップを取っていきます。
    本当にありがとうございました。

Your answer might help someone💌