0

谁能向我解释为什么 add() 方法返回 0 而不是 4?我正在尝试使用 int 0 以防提供“无效”字符串编号(例如四个)。我得到了字符串参数 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

4

3 回答 3

1

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

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

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

于 2013-01-27T03:48:37.970 回答
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
于 2013-01-27T03:53:15.240 回答
0

如果您使用错误的甲酸盐参数作为第一个参数,那么语句会发生异常

x = Integer.parseInt(a);

线

y = Integer.parseInt(a);

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

于 2013-01-27T04:04:26.423 回答