Java NumberFormatException处理

Java NumberFormatException处理,java,Java,有人能解释一下为什么add()方法返回0而不是4吗? 如果提供了“无效”字符串编号(例如4),我尝试使用int 0。 对于字符串参数3,4/3,4/3,4/我得到了正确的结果,但是对于3,4,我没有得到正确的结果 你能告诉我我做错了什么吗? 谢谢 public class Numbers2 { public static void main(String[] args) { System.out.println(add("d","4")); } // main

有人能解释一下为什么add()方法返回0而不是4吗? 如果提供了“无效”字符串编号(例如4),我尝试使用int 0。 对于字符串参数3,4/3,4/3,4/我得到了正确的结果,但是对于3,4,我没有得到正确的结果

你能告诉我我做错了什么吗? 谢谢

public class Numbers2
{
    public static void main(String[] args) {

        System.out.println(add("d","4"));
    } // main() method

   public static int add(String a, String b)
   {
       int x = 0;
       int y = 0;

      try{ 
          x = Integer.parseInt(a); 
          y = Integer.parseInt(b);

          System.out.println("No exception: " + (x+y));

          return x + y;
      }
      catch (NumberFormatException e){

          if(x != (int) x ){              
              x = 0;
          }
          if(y != (int) x ){
              y = 0;              
          }      
          return x + y;  
      }

   } // add() method
} // class

因为第二个参数是“d”,所以您总是会遇到异常情况。这里,x=y=0

这里的If语句不会做任何事情,因为(x==(int)x)总是在x是int时执行,而(y==(int)x)都是0,所以这两个块都不会执行


因此,x+y将始终=0。

问题是,行
y=Integer.parseInt(b)“d”
作为非整数的第一个参数传递时,
x=integer.parseInt(a)行没有机会执行导致异常,并且
x
y
都保持为0

您可以通过对以下两种情况分别使用try/catch来解决此问题:

int x = 0; //x is 0 by default
int y = 0; //y is 0 by default

try { 
    x = Integer.parseInt(a); //x will remain 0 in case of exception  
}
catch (NumberFormatException e) {
    e.printStackTrace();
}

try {  
    y = Integer.parseInt(b); //y will remain 0 in case of exception  
}
catch(NumberFormatException e) {
      e.printStackTrace();
}

return x + y; //return the sum

若使用错误的Format参数作为第一个参数,那个么在语句处会发生异常

x = Integer.parseInt(a);
线路

y = Integer.parseInt(a);

在这种情况下永远不会执行,所以对每个语句使用不同的try-catch块。

就是这样。。。这就是我一直在寻找的答案。。。非常感谢!