NumberFormatException处理

时间:2013-01-27 03:46:12

标签: java

有人可以向我解释为什么add()方法返回0而不是4? 我正在尝试使用int 0,以防提供“无效”字符串编号(例如四个)。 我得到了正确的字符串参数3,4 / 3,四/三,四/但不是三,四。

你可以告诉我我做错了什么吗? 谢谢!

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

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

3 个答案:

答案 0 :(得分:1)

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

这里的If语句不会做任何事情,因为(x ==(int)x)总是当x是int而且(y ==(int)x)因为它们都是0所以这些块都不会被执行

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

答案 1 :(得分:0)

问题是,行y = Integer.parseInt(b);没有机会执行,因为您传递"d"作为非整数的第一个参数,行x = Integer.parseInt(a);导致异常,xy都保持为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

答案 2 :(得分:0)

如果使用错误的formate参数作为第一个参数,则在语句

处发生异常
x = Integer.parseInt(a);

该行

y = Integer.parseInt(a);
在这种情况下永远不会执行

,因此请为每个语句使用不同的try-catch块。