2012-10-26 26 views
0

我不知道为什么我没有得到预期的结果!我已经写下了预期的结果。好吧,我有两个类:CalculatorEngineCalculatorInput,前者计算后者给出线模式界面。为CalculatorEngine的代码是这样的,没有任何幻想:在java中制作计算器

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功能无法正常工作。帮帮我!

+0

添加是你给的输入为1 + 2的像1 2的样本输入+ –

回答

4

更改此:

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

要这样:

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

否则,只会当c是'0'是真实的。

2
else if (c == '0' && c <= '9') engine.digit(c - '0'); 

如果c不等于0的假..