尝试对具有空字段的整数求和时出现计算器错误

时间:2018-08-13 22:05:42

标签: java android calculator

我已经制作了一个计算器,将来自用户的两个数字相加.num1和num2是提供给用户以接收用户数字的edittexts.Result是一个在屏幕上显示结果的textview。输入是两个整数,但是如果instance(5 + null)或(null + 2)应用程序其中之一为null,应用程序将给出错误并关闭自身。我的错误在哪里?这是我尝试过的

 public class MainActivity extends AppCompatActivity {

    EditText num1;
    EditText num2;
    TextView result;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        num1=(EditText)findViewById(R.id.number1);
        num2=(EditText)findViewById(R.id.number2);
        result=(TextView) findViewById(R.id.result);
    }
   public void plus(View view) {
       int a = Integer.parseInt(num1.getText().toString());
       int b = Integer.parseInt(num2.getText().toString());
           if(num1.getText().toString()==null)
           {
               a=0;
           }
           if(num2.getText().toString()==null)
           {
                b=0;
        }
       int sum2 = a + b;
       result.setText(" " + sum2);
   }

6 个答案:

答案 0 :(得分:1)

每次将字符串解析为数字时,都必须使用try / catch。这将捕获任何分析错误,包括空字符串:

public void plus(View view) {
    int a = 0;
    int b = 0;

    try {
        a = Integer.parseInt(num1.getText().toString().trim());
    } catch (NumberFormatException e) { }

    try {
        b = Integer.parseInt(num2.getText().toString().trim());
    } catch (NumberFormatException e) { }

    int sum2 = a + b;

    result.setText("" + sum2);
}

答案 1 :(得分:0)

我认为您需要先检查EditText是否包含数据,然后再尝试将字符串解析为int。

您在代码中所做的操作是错误的,因为您调用了EditText内部没有任何值的getText()方法,从而试图将值“ null”解析为一个int。尝试将非数字值解析为int会引发异常,从而导致应用崩溃。

P.s .:您可能会在Android Studio底部的Logcat窗口中看到抛出的异常。

希望我的回答对您有所帮助。

答案 2 :(得分:0)

public void plus(View view) {

   try{

      int a = Integer.parseInt(num1.getText().toString());
      int b = Integer.parseInt(num2.getText().toString());

   }

   catch(NumberFormatterException e){

       if(num1.getText().toString()==null)
       {
           a=0;
       }
       if(num2.getText().toString()==null)
       {
            b=0;
      }
  }

   int sum2 = a + b;
   result.setText(" " + sum2);

   }

答案 3 :(得分:0)

尝试:

   Aug 13 16:07:55 localhost haproxy[12619]: 172.17.107.2:39572 [13/Aug/2018:16:07:55.098] www-http default/racktables 2/0/0/38/40 304 195 - - ---- 6/6/0/1/0 0/0 "GET /index.php?module=chrome&uri=pix/favicon.ico HTTP/1.1"
   Aug 13 16:08:08 localhost haproxy[12619]: 172.17.107.2:39584 [13/Aug/2018:16:08:08.745] www-http prueba2/<NOSRV> 0/-1/-1/-1/0 302 121 - - LR-- 0/0/0/0/3 0/0 "GET /rack HTTP/1.1"

也转到XML的EditText并在EditText中设置InputType-> number 它也会正常工作

答案 4 :(得分:0)

您可以使用0值初始化变量a和b fist,然后为num1和num2检查null。请参考以下代码:

    public void plus(View view) {
        int a = 0;
        int b = 0;

        if (num1 != null && num1.getText() != null && num1.getText().toString() != "") {
            a = Integer.parseInt(num1.getText().toString());
        }

        if (num2 != null && num2.getText() != null && num2.getText().toString() != "") {
            b = Integer.parseInt(num2.getText().toString());
        }

        int sum2 = a + b;
        result.setText(" " + sum2);
    }

答案 5 :(得分:-1)

        public void onClick(View view) {
            int n1 = 0, n2 = 0;
            try {
                n1 = Integer.parseInt(num1.getText().toString());
            }
            catch(NumberFormatException e) {
                if (num1.getText().toString() == null) {

                    n1 = 0;
                }
            }
            try {
                n2 = Integer.parseInt(num2.getText().toString());
            }
            catch(NumberFormatException e) {
                if (num2.getText().toString() == null) {
                    n2 = 0;
                }
            }
            int sum = n1 + n2;
            result.setText("Answer : " + String.valueOf(sum));

        }

如果有任何空白字段,这就是处理异常的方法。希望对您有所帮助。