プロが教える店舗&オフィスのセキュリティ対策術

3つのソースが一つになって動く電卓のプログラムみたいですが・・・
倍精度浮動小数点数で計算結果を表示します
また、画像は動作させるときの条件です。

動いてはくれるんですけど、
足し算になった時に3.0+3.0=0.0となってしまいます。

課題1
次のソースコード1-1 と1-2 は、電卓のプログラムCalculator クラスと標準入力用のクラスである。この計算機クラスを動作させるには、Adder(加算器)、Subtracter(減算器)、Multiplier(乗算器)、Divider(除算器)、Factrial(階乗)の5 つのクラスが必要である。これら5 つのクラスのソースコードを示せ。また、過去の課題や講義資料を参考に処理の流れが分かるようコメントを追加せよ。

1-1のCalculatorクラスと標準入力(StandardInputクラス)を書きます。
これから作ろうとしているAdderクラスは元々穴埋めになっていて
(他のクラスも同様)
一通り埋めてみましたが、正しい結果が出ません。どこがおかしいのか
ヒントだけでもいいので教えてください。
Adderクラスは一番下に書いておきました。

1-1Calculator.java
// 電卓 のクラス
public class Calculator {
// StandardInput.javaで読み込んだ文字を受け取るメソッド
public static void main(String[] args){
char operation = ' '; // 入力された文字列を代入する為の変数
while (operation != 'q') {
StandardInput stdin = new StandardInput();
System.out.println("演算の種類: (+,-,*,/,!; q で終了)");
operation = stdin.getChar();
// 入力された文字列に応じてそれぞれの処理を実行する
switch (operation) {
case '+': // 加算 の処理
Adder add = new Adder();
add.show(stdin.getDoubleArray(2));
break;
case '-': // 減算 の処理
Subtracter sub = new Subtracter();
sub.show(stdin.getDoubleArray(2));
break;
default: // 例外 の処理
System.out.println("演算の種類を判別できません");
break;
}
}
}
}

ソースコード1-2 StandardInput.java
/* 標準入力クラス */
import java.io.*;
public class StandardInput {
protected BufferedReader buf;
public StandardInput() {
this.buf = new BufferedReader(new InputStreamReader(System.in));
}
public StandardInput(BufferedReader buf) {
this.buf = buf;
}
public char getChar() {
try {
System.out.print("1 文字入力してください:");
return buf.readLine().charAt(0);
} catch (Exception e) {
System.out.print(e);
return ' ';
}
}
public double getDouble() {
try {
System.out.print("数を入力してください:");
return Double.parseDouble(buf.readLine());
} catch (Exception e) {
System.out.print(e);
return -1;
}
}
public int getInt() {
try {
System.out.print("整数を入力してください:");
return Integer.parseInt(buf.readLine());
} catch (Exception e) {
System.out.print(e);
return -1;
}
}
public double[] getDoubleArray(int max_input) {
double[] input = new double[max_input];
try {
for (int i = 0; i < max_input; i++) {
System.out.print((i + 1) + "つ目の数字を入力してください:");
input[i] = Double.parseDouble(buf.readLine());
}
} catch (Exception e) {
System.out.print(e);
}
return input;
}
public int[] getIntArray(int max_input) {
int[] input = new int[max_input];
try {
for (int i = 0; i < max_input; i++) {
System.out.print((i + 1) + "つ目の数字を入力してください:");
input[i] = Integer.parseInt(buf.readLine());
}
} catch (Exception e) {
System.out.print(e);
}
return input;
}
}

// 加算機のクラス
public class Adder {
// ??? を行うメソッド
public double calc(double[] input) {
double solution = 0;
for ( int i = 0; solution < i; i++ ) {
solution += input[i];
}
return solution;
}
// 計算結果の表示を行うメソッド
public void show(double[] input) {
System.out.print(input[0]);
for (int i = 1; i < input.length; i++) {
System.out.print(" + " + input[i]);
}
System.out.println(" = " + calc(input));
}
}

ごめんなさい・・・凄く長いですがお願いします。

「クラスを使った電卓のプログラム」の質問画像

A 回答 (1件)

// 加算機のクラス


public class Adder {
// ??? を行うメソッド
public double calc(double[] input) {
double solution = 0;
for ( int i = 0; i < input.length; i++ ) { //この行
solution += input[i];
}
return solution;
}
// 計算結果の表示を行うメソッド
public void show(double[] input) {
System.out.print(input[0]);
for (int i = 1; i < input.length; i++) {
System.out.print(" + " + input[i]);
}
System.out.println(" = " + calc(input));
}
}

//当然、書き換えたらAdder.javaをコンパイルしなおすべし
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A