尝试将整数与空字段相加时计算器出错

Calculator-Error when try to sum an integer with an empty field

我制作了一个计算器,可以对来自用户的两个数字求和。num1 和 num2 是用来接收来自 user.Result 的数字的编辑文本,是一个在 [=14= 上显示结果的文本视图] 当输入是两个整数时正确求和,但如果其中一个为空,例如 (5+null) 或 (null+2) 应用程序给出错误并关闭 itself.Where 是我的错误?这是我尝试过的

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

我认为在尝试将字符串解析为 int 之前,您需要检查 EditText 中是否包含数据。

您在代码中所做的事情是错误的,因为您在 EditText 中没有任何值的情况下调用了 getText() 方法,因此试图将值“null”解析为 int。尝试将非数值解析为 int 会引发异常,进而导致应用程序崩溃。

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

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

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

   }

试一试:

public class MainActivity extends AppCompatActivity {
EditText num1;
EditText num2;
TextView result;
Integer a=0,b=0;
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) {

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

       }else {
           a=0;
             }
     if(num2.getText().toString()!=null||num2.getText().toString()equal("")){
       b = Integer.parseInt(num2.getText().toString());

        }else {
             b=0;
              }
     result.setText(String.valueOf(a+b) );     
  }

同时转到 XML 中的 Your EditText 并在 EditText ->number 中设置 InputType 它也会起作用

您可以先用 0 值初始化变量 a 和 b,然后检查 num1 和 num2 是否为空。参考以下代码:

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

每次将字符串解析为数字时都必须使用 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);
}
        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));

        }

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