有人可以向我解释为什么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
答案 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);
导致异常,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
答案 2 :(得分:0)
如果使用错误的formate参数作为第一个参数,则在语句
处发生异常x = Integer.parseInt(a);
该行
y = Integer.parseInt(a);
在这种情况下永远不会执行,因此请为每个语句使用不同的try-catch块。