子字符串删除2个字符,而不是1个

时间:2018-11-20 00:33:17

标签: java string switch-statement substring

我的作业要求我有一个清除的最后一个按钮,该按钮将删除字符串中的最后一个字符。从代码中可以看出,它应该排除最后一个数字。

问题是输入数字后第一次按此键时,它会删除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

1 个答案:

答案 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(),否则....