【问题标题】:How to make backspace on calculator? [duplicate]如何在计算器上进行退格? [复制]
【发布时间】:2020-12-29 01:29:49
【问题描述】:

我正在制作计算器应用程序。
我尝试制作删除按钮,但出现错误。
(1) 如果我在没有号码的情况下按退格键,应用程序会突然关闭。
(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));

    }

【问题讨论】:

    标签: java android calculator


    【解决方案1】:

    问题 1 是因为 del_number.length() 为 0,所以 del_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); } }之类的代码后解决了问题1
    • 但我无法解决问题 2。我尝试了几个不同的代码,但都出错了。
    【解决方案2】:


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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      相关资源
      最近更新 更多