backspace按钮在计算器应用程序上不起作用

vltsax25  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(364)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

9天前关门了。
改进这个问题
我正在做一个简单的计算器应用程序。除了退格外,一切正常。其中有两个错误。如果没有要删除的号码,应用程序将关闭。我用一个新代码修复了它。
但我真的不能解决最后一个问题。当我删除号码后放入新号码时,删除的号码会再次出现。
你能告诉我怎么修吗? deleteOnClick 在最后。 workings 似乎是错的,我试图用不同的代码修复,但我不断出错。

public class MainActivity extends AppCompatActivity {
    TextView workingsTV;
    TextView resultsTV;
    String workings = "";
    String CLEAR_INT_TEXT;
    Boolean isFirstInput = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initTextView();
    }

    private void initTextView() {
        workingsTV = (TextView)findViewById(R.id.workingsTextView);
        resultsTV = (TextView)findViewById(R.id.resultTextView);
    }

    private void setWorkings(String givenValue) {
        workings = workings + givenValue;
        workingsTV.setText(workings);
    }

    public void equalsOnClick(View view) {
        Double result = null;
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
        try {
            result = (Double) engine.eval(workings);
            if (result != null) {
                int intVal = (int) result.doubleValue();
                if (result == intVal) {//Check if it's value is equal to its integer part
                    resultsTV.setText(String.valueOf(intVal));
                }
                else {
                    resultsTV.setText(String.valueOf(result));
                }
            }
        }
        catch (ScriptException e) {
            Toast.makeText(this, "Invalid Input", Toast.LENGTH_SHORT).show();
        }
    }

    public void clearOnClick(View view) {
        workingsTV.setText("");
        workings = "";
        resultsTV.setText("");
        leftBracket = true;
        isFirstInput = true;
    }

    boolean leftBracket = true;
    public void bracketsOnClick(View view) {
        if(leftBracket) {
            setWorkings("(");
            leftBracket = false;
        }
        else {
            setWorkings(")");
            leftBracket = true;
        }
    }

    public void deleteOnClick(View view) {
        if(workingsTV.getText().toString().length() > 1) {
            String getResultText = workingsTV.getText().toString();
            String subString = getResultText.substring(0, getResultText.length() -1);
            workingsTV.setText(subString);
        } else {
            workingsTV.setText(CLEAR_INT_TEXT);
            isFirstInput = true;
        }
    }

    public void divisionOnClick(View view)
    {
        setWorkings("/");
    }

    public void sevenOnClick(View view)
    {
        setWorkings("7");
    }

    public void eightOnClick(View view)
    {
        setWorkings("8");
    }

    public void nineOnClick(View view)
    {
        setWorkings("9");
    }

    public void timesOnClick(View view)
    {
        setWorkings("*");
    }

    public void fourOnClick(View view)
    {
        setWorkings("4");
    }

    public void fiveOnClick(View view)
    {
        setWorkings("5");
    }

    public void sixOnClick(View view)
    {
        setWorkings("6");
    }

    public void minusOnClick(View view)
    {
        setWorkings("-");
    }

    public void oneOnClick(View view)
    {
        setWorkings("1");
    }

    public void twoOnClick(View view)
    {
        setWorkings("2");
    }

    public void threeOnClick(View view)
    {
        setWorkings("3");
    }

    public void plusOnClick(View view)
    {
        setWorkings("+");
    }

    public void decimalOnClick(View view)
    {
        setWorkings(".");
    }

    public void zeroOnClick(View view)
    {
        setWorkings("0");
    }
}

我找到了解决办法。
workings = workings.substring(0, workings.length() -1); workings 也应该删除。

dphi5xsq

dphi5xsq1#

在“deleteonclick”中,您可以执行以下操作:

Editable edit = workingsTV.getText();
int len = edit.length();
if (len > 0) edit.delete(len - 1, len);

也许这可以代替使用子字符串

相关问题