Java 如何在计算器上进行退格?

Java 如何在计算器上进行退格?,java,android,calculator,Java,Android,Calculator,我正在制作计算器应用程序。 我试图创建“删除”按钮,但出现错误。 (1) 如果在没有号码时按backspace,应用程序会突然关闭。 (2) 如果在删除号码后按新号码,则先前删除的号码会再次显示 我搜索了很多关于它的信息,但作为初学者我无法理解它们。 如果你能简单地解释一下,我将不胜感激 public class MainActivity extends AppCompatActivity { TextView workingsTV; TextView resultsTV;

我正在制作计算器应用程序。
我试图创建“删除”按钮,但出现错误。
(1) 如果在没有号码时按backspace,应用程序会突然关闭。
(2) 如果在删除号码后按新号码,则先前删除的号码会再次显示

我搜索了很多关于它的信息,但作为初学者我无法理解它们。
如果你能简单地解释一下,我将不胜感激

public class MainActivity extends AppCompatActivity {

    TextView workingsTV;
    TextView resultsTV;

    String workings = "";

    @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 deleteOnClick(View view)
    {

        String del_number = workingsTV.getText().toString();
        workingsTV.setText(del_number.substring(0,del_number.length() - 1));

    }

问题1是因为
del\u number.length()
为0,所以
del\u number.length()-1
为-1,这是子字符串的非法参数。最简单的修复方法是,如果长度为0,则不执行任何操作

问题2是因为删除时没有重置变量加工。它需要设置为“”。或者根本没有这个变量,总是使用workingsTV.getText()作为真理的来源。


我找到了解决方案。 我这样编辑代码是为了防止应用程序突然关闭

    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);
        }
    }

但我仍然有一个问题,当我按下新号码时,我删除的字母会返回。
解决办法就是这样。
workings=workings.substring(0,workings.length()-1)

应删除
workings
处的字母以及
workingsTV


下面是删除的完整代码

    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);

             workings =  workings.substring(0, workings.length() -1);
        }
        else
            {
            workingsTV.setText(CLEAR_INT_TEXT);
        }
    }

谢谢你的解释。我只学了一个月的编程,很难编写出没有错误的代码。你能告诉我如何编码吗?我在编辑代码后解决了问题1,比如
public void deleteOnClick(视图){if(workingsTV.getText().toString().length()>1){String getResultText=workingsTV.getText().toString();String subString=getResultText.subString(0,getResultText.length()-1);workingsTV.setText(subString);}{workingsTV.setText(CLEAR_INT_TEXT)}
但我无法解决问题2。我尝试了一些不同的代码,但都出现了错误。