合計値を初期化したいとありますが、そもそもその合計値であろうtotalをどの場所でも呼び出していないみたいですね。
コンストラクタとinitメソッドの必要性を感じないのですが。
Like!
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("入力値が数値ではありません");
}
}
}
合計値を初期化したいとありますが、そもそもその合計値であろうtotalをどの場所でも呼び出していないみたいですね。
コンストラクタとinitメソッドの必要性を感じないのですが。
@shun03
Questionerpackage 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が代入されます。
@shun03
Questioner