我的作业要求我有一个清除的最后一个按钮,该按钮将删除字符串中的最后一个字符。从代码中可以看出,它应该排除最后一个数字。
问题是输入数字后第一次按此键时,它会删除2,随后的使用会取出1。您知道如何解决此问题吗?
代码:
case "Clear Last":
String remove;
remove = text.substring(text.length()-1);
switch (remove) {
case "+":
add = false;
text = text.substring(0, text.length() - 1);
display.setText(text);
break;
case "-":
subtract = false;
text = text.substring(0, text.length() - 1);
display.setText(text);
break;
case "*":
multiply = false;
text = text.substring(0, text.length() - 1);
display.setText(text);
break;
case "/":
divide = false;
text = text.substring(0, text.length() - 1);
display.setText(text);
break;
default:
text = text.substring(0, text.length()-1);
display.setText(text);
break;
}
break;
示例输出:
77777->清除最后-> 777->清除最后-> 77-> 778888->清除最后-> 7788->清除最后-> 778
答案 0 :(得分:1)
问题出在这里(以及所有这些摘要):-
text = display.getText();
display.setText(text + "7");
您正在更新text
,之前。您应该互换它们,它应该可以工作:-
display
更好的是,只需更新display.setText(text + "7");
text = display.getText();
的值并在text
外部设置display
,就像这样:-
switch
或者通过消除切换情况来进一步改进它-检查public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
case "0":
case ".":
text += e.getActionCommand();
break;
case "=":
break;
case "Clear Last":
text = text.substring(0, (text.length() - 1));
break;
case "Clear All":
text = "";
break;
default:
text = "";
break;
}
display.setText(text);
}
是否为数字,然后执行e.getActionCommand()
,否则....