0

期待した結果が得られない理由がわかりません!最後に期待される結果を書きました。さて、私は 2 つのクラスを持っています:CalculatorEngineCalculatorInput、前者は計算し、後者はライン モード インターフェイスを提供します。のコードはCalculatorEngine次のようになります。

public class CalculatorEngine {
    int value;
    int keep;
    int toDo;

    void binaryOperation(char op){
        keep = value;
        value = 0;
        toDo = op;
    }

    void add() {binaryOperation('+');}
    void subtract() {binaryOperation('-');}
    void multiply() {binaryOperation('*');}
    void divide() {binaryOperation('/');}

    void compute() {
        if (toDo == '+')
            value = keep + value;
        else if (toDo == '-')
            value = keep - value;
        else if (toDo == '*')
            value = keep * value;
        else if (toDo == '/')
            value = keep/value;
        keep = 0;
    }

    void clear(){
        value = 0;
        keep = 0;
    }

    void digit(int x){
        value = value*10 + x;
    }

    int display(){
        return (value);
    }

    CalculatorEngine() {clear();} //CONSTRUCTOR METHOD!

}

コードはCalculatorInput次のようになります。

import java.io.*;

public class CalculatorInput {
    BufferedReader stream;
    CalculatorEngine engine;

    CalculatorInput(CalculatorEngine e) {
        InputStreamReader input = new InputStreamReader(System.in);
        stream = new BufferedReader(input);
        engine = e;
    }

    void run() throws Exception {
        for (;;) {
            System.out.print("[" +engine.display()+ "]");
            String m = stream.readLine();
            if (m==null) break;
            if (m.length() > 0) {
                char c = m.charAt(0);
                if (c == '+') engine.add();
                else if (c == '*') engine.multiply();
                else if (c == '/') engine.divide();
                else if (c == '-') engine.subtract();
                else if (c == '=') engine.compute();
                else if (c == '0' && c <= '9') engine.digit(c - '0');
                else if (c == 'c' || c == 'C') engine.clear();
            }
        }
    }

    public static void main(String arg[]) throws Exception{
        CalculatorEngine e = new CalculatorEngine();
        CalculatorInput x = new CalculatorInput(e);
        x.run();
    }
}

答えは次のようになると思います。

[0]1
[1]3
[13]+
[0]1
[1]1
[11]=
[24]

しかし、私はこれを取得しています:

[0]1
[0]3
[0]+
[0]1
[0]1
[0]+
[0]

digit機能が正常に動作していないようです。ヘルプ!

4

2 に答える 2

4

これを変える:

if (c == '0' && c <= '9')

これに:

if (c >= '0' && c <= '9')

それ以外の場合、 c が の場合にのみ true になります'0'

于 2012-10-26T12:52:56.363 に答える
2
else if (c == '0' && c <= '9') engine.digit(c - '0');

cが0に等しくない場合、そのfalse..

于 2012-10-26T12:55:13.347 に答える