Android - 帮助计算器逻辑

时间:2011-05-27 15:53:58

标签: android logic calculator

我做了一个自定义对话框,它是一个用于加法,减法,乘法和除法的简单计算器。我无法正确获取代码逻辑。有没有人有任何智慧或知道我可以查看的资源,这可能有所帮助。

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

谢谢!

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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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