【问题标题】:Android calculator error message when dividing by 0除以 0 时的 Android 计算器错误消息
【发布时间】:2018-05-11 07:56:39
【问题描述】:

我是 Android Studio 的新手,我正在开发一个计算器应用程序。现在,当我除以零时,自然会收到错误消息“Infinity”,但如果我想将其更改为“无法除以零”怎么办?

  import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    public class Divisionpage extends AppCompatActivity implements View.OnClickListener {
        private Button btnDiv;
        private TextView AnswDiv;
        private EditText Divt1, Divt2;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_divisionssida);
            init();
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                }
            });
        }

        private void init() {
            btnDiv = (Button)findViewById(R.id.btnDiv);
            AnswDiv = (TextView)findViewById(R.id.AnswDiv);
            Divt1 = (EditText)findViewById(R.id.Divtal1);
            Divt2 = (EditText)findViewById(R.id.Divtal2);
            btnDiv.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            String num7 = Divt1.getText().toString();
            String num8 = Divt2.getText().toString();
            switch (v.getId()){
                case R.id.btnDiv:
                    try {
                        float division = Float.parseFloat(num7) / Float.parseFloat(num8);
                        AnswDiv.setText(String.valueOf(division));
                    }catch (Exception e) {
                        AnswDiv.setText("Could not divide!");
                    }
                    break;
            }
        }
    }

我尝试捕获异常以显示如您所见的错误消息,但它失败了。你有什么建议?

【问题讨论】:

    标签: android error-handling exception-handling


    【解决方案1】:

    你实际上可以检查 num8 的值,如果它的 0 设置正确的消息。

     @Override
        public void onClick(View v) {
            String num7 = Divt1.getText().toString();
            String num8 = Divt2.getText().toString();
            switch (v.getId()){
                case R.id.btnDiv:
                    try {
                        final float denominator = Float.parseFloat(num8);
                        if(denominator == 0){
                            AnswDiv.setText("Can't divide by zero");
                            return;
                        }
                        float division = Float.parseFloat(num7) / Float.parseFloat(num8);
                        AnswDiv.setText(String.valueOf(division));
                    }catch (Exception e) {
                        AnswDiv.setText("Could not divide!");
                    }
                    break;
            }
        }
    

    您可以进一步改善异常处理的用户体验,例如: 除非在 edittext MIME 中受到限制,否则用户可能会引入非数字字符。尝试解析所述字符将抛出 NumberFormatException ,这将被您的异常子句捕获并设置您的消息。这虽然没有错,但可以改进,通知用户只有数字字符是有效的。

    catch (NumberFormatException ex){
         AnswDiv.setText("Only numbers allowed!");
    }
    

    【讨论】:

    • 谢谢,这成功了。我只是想问一下,如果没有显示特定的错误消息(“无法除法!”),那么代码中的 catch 异常有什么意义?对不起,如果这是一个愚蠢的问题,但我正在学习。
    • catch (NumberFormatException ex){ AnswDiv.setText("只允许数字!"); } 以防用户在您的文本框中输入字母。 Exception 子句是无用的(当然除非 AnswDiv 为空)
    • 另外,如果答案解决了问题,您介意接受吗? :)
    • 我在想你的第一个代码中的 catch 异常: }catch (Exception e) { AnswDiv.setText("Could not divide!"); }
    • 哦,那是你原来的帖子,我不排除它不好。这是行不通的,因为将浮点数除以零不会引发任何异常,因此永远不会执行 catch 块,并且您看不到“无法除法”。我说清楚了吗?
    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 2022-01-11
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多