我做了一个自定义对话框,它是一个用于加法,减法,乘法和除法的简单计算器。我无法正确获取代码逻辑。有没有人有任何智慧或知道我可以查看的资源,这可能有所帮助。
下面是我的自定义对话框和我正在处理的计算器逻辑的代码。因为它是所有的计算工作正常,除了我使用等于按钮。计算我在那之后做的不对。
谢谢!
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);
}
}
}
答案 0 :(得分:0)
考虑将您的应用分为两部分。 gui收集输入并选择动作。现在创建另一个类进行计算,比如Model.java。此类应提供接受参数并提供返回值的方法。测试这些隔离方法的准确性和无效输入,超出范围值和无意义输入。设计模型抛出的异常。现在将GUI连接到Model。