【发布时间】: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