【问题标题】:Android - Help with Calculator LogicAndroid - 计算器逻辑帮助
【发布时间】:2011-05-27 15:53:58
【问题描述】:

我制作了一个自定义对话框,它是一个简单的加法、减法、乘法和除法计算器。我无法让我的代码逻辑正确。有没有人有任何智慧之言或知道我可以查看的资源。

下面是我的自定义对话框和我正在处理的计算器逻辑的代码。因为除了我使用等于按钮时,所有计算都可以正常工作。在那之后我做的计算结果不正确。

谢谢!

Calculator http://img546.imageshack.us/img546/9534/devicee.png

public class CustomCalcDialog extends Dialog {

    public CustomCalcDialog(Context context) {
        super(context);
    }

    EditText calcDialogDisplay;
    TextView enterTotal;
    TextView allClear;
    TextView seven;
    TextView eight;
    TextView nine;
    TextView division;
    TextView four;
    TextView five;
    TextView six;
    TextView multiply;
    TextView one;
    TextView two;
    TextView three;
    TextView subtract;
    TextView decimal;
    TextView zero;
    TextView equals;
    TextView addition;

    ArrayList<Float> mathVariables = new ArrayList<Float>();
    float mathVariable1;
    float mathVariable2;

    int currentOperation = 0;
    int nextOperation;

    final static int ADD = 1;
    final static int SUBTRACT = 2;
    final static int MULTIPLY = 3;
    final static int DIVISION = 4;
    final static int EQUALS = 5;

    final static int CLEAR = 1;
    final static int DONT_CLEAR = 0;
    int clearCalcDisplay = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calculator_dialog);

        calcDialogDisplay = (EditText) findViewById(R.id.calc_dialog_display);
        enterTotal = (TextView) findViewById(R.id.enter_total);
        allClear = (TextView) findViewById(R.id.all_clear);
        seven = (TextView) findViewById(R.id.seven);
        eight = (TextView) findViewById(R.id.eight);
        nine = (TextView) findViewById(R.id.nine);
        division =(TextView) findViewById(R.id.division);
        four = (TextView) findViewById(R.id.four);
        five = (TextView) findViewById(R.id.five);
        six =(TextView) findViewById(R.id.six);
        multiply = (TextView) findViewById(R.id.multiply);
        one = (TextView) findViewById(R.id.one);
        two = (TextView) findViewById(R.id.two);
        three = (TextView) findViewById(R.id.three);
        subtract = (TextView) findViewById(R.id.subtract);
        decimal = (TextView) findViewById(R.id.decimal);
        zero = (TextView) findViewById(R.id.zero);
        equals = (TextView) findViewById(R.id.equals);
        addition = (TextView) findViewById(R.id.addition);

        calcDialogDisplay.setKeyListener(DigitsKeyListener.getInstance(true,true));

        registerListeners();
    }

    public void registerListeners () {

        enterTotal.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                activeTextView.setText(calcDialogDisplay.getText().toString());
                mathCalculations();
                CustomCalcDialog.this.dismiss();
            }
        });

        allClear.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calcDialogDisplay.setText("");
                mathVariable1 = 0;
                mathVariable2 = 0;
                mathVariables.removeAll(mathVariables);
                currentOperation = 0;
                nextOperation = 0;                  
            }
        });

        seven.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append("7");

            }
        });

        eight.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append("8");

            }
        });

        nine.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append("9");

            }
        });

        division.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calcLogic(DIVISION);                    
            }
        });

        four.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append("4");

            }
        });

        five.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append("5");

            }
        });

        six.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append("6");

            }
        });

        multiply.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calcLogic(MULTIPLY);

            }
        });

        one.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append("1");

            }
        });

        two.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append("2");

            }
        });

        three.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append("3");

            }
        });

        subtract.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calcLogic(SUBTRACT);
            }               
        });

        decimal.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append(".");

            }
        });

        zero.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearCalcDisplay == CLEAR) {
                    calcDialogDisplay.setText("");
                }
                clearCalcDisplay = DONT_CLEAR;
                calcDialogDisplay.append("0");

            }
        });

        equals.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calcLogic(EQUALS);

            }
        });

        addition.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calcLogic(ADD);
            }
        });
    }

    private void calcLogic(int operator) {

        mathVariables.add(Float.parseFloat(calcDialogDisplay.getText().toString()));

        if (operator != EQUALS) {
            nextOperation = operator;
        }else if (operator == EQUALS){
            nextOperation = 0;
        }

        switch (currentOperation) {
        case ADD:               
            mathVariable1 = mathVariables.get(0);
            mathVariable2 = mathVariables.get(1);

            mathVariables.removeAll(mathVariables);

            mathVariables.add(mathVariable1 + mathVariable2);

            calcDialogDisplay.setText(String.format("%.3f", mathVariables.get(0)));
            break;
        case SUBTRACT:
            mathVariable1 = mathVariables.get(0);
            mathVariable2 = mathVariables.get(1);

            mathVariables.removeAll(mathVariables);

            mathVariables.add(mathVariable1 - mathVariable2);

            calcDialogDisplay.setText(String.format("%.3f", mathVariables.get(0)));
            break;
        case MULTIPLY:
            mathVariable1 = mathVariables.get(0);
            mathVariable2 = mathVariables.get(1);

            mathVariables.removeAll(mathVariables);

            mathVariables.add(mathVariable1 * mathVariable2);

            calcDialogDisplay.setText(String.format("%.3f", mathVariables.get(0)));
            break;
        case DIVISION:
            mathVariable1 = mathVariables.get(0);
            mathVariable2 = mathVariables.get(1);

            mathVariables.removeAll(mathVariables);

            mathVariables.add(mathVariable1 / mathVariable2);

            calcDialogDisplay.setText(String.format("%.3f", mathVariables.get(0)));
            break;
        }

        clearCalcDisplay = CLEAR;
        currentOperation = nextOperation;
        if (operator == EQUALS) {
            mathVariable1 = 0;
            mathVariable2 = 0;
            mathVariables.removeAll(mathVariables);
        }
    }
}

【问题讨论】:

  • 这张照片很棒。
  • 你目前有什么代码?您的问题具体在哪里?
  • 我刚刚添加了代码以及发生了什么。计算器逻辑在最后称为“calcLogic”。
  • 我想通了。我基本上不得不在 calcLogic 结束时将变量重置为 0。我已经将代码更新为现在的样子。一切似乎都在工作。如果有人对我应该如何做我的逻辑有更好的建议,请告诉我。感谢大家的帮助!
  • 如果您对结果感到满意,您可能希望将其作为答案发布并接受它,以便其他有类似问题的人可以找到您的解决方案。

标签: android logic calculator


【解决方案1】:

考虑将您的应用分成两部分。 gui 收集输入并选择操作。现在创建另一个类来进行计算,比如 Model.java。此类应提供接受参数并提供返回值的方法。测试这些隔离方法的准确性和无效输入、超出范围的值和无意义的输入。为您的模型设计要抛出的异常。现在将 GUI 连接到模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多