问题描述
|
我创建了一个自定义对话框,该对话框是用于加,减,乘和除的简单计算器。我无法正确设置代码的逻辑。有没有人有任何智慧的话或对资源的了解,我可以检查一下是否有帮助。
以下是我的自定义对话框和我正在使用的计算器逻辑的代码。因为所有的计算工作正常,除了当我使用equals按钮时。在那之后我做的计算不正确。
谢谢!
计算器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);
}
}
}
解决方法
考虑将您的应用分为两部分。 gui收集输入并选择操作。现在创建另一个类进行计算,例如Model.java。此类应提供采用参数并提供返回值的方法。测试这些隔离的方法的准确性和无效输入,超出范围的值和无意义的输入。设计模型要抛出的异常。现在,将GUI连接到模型。