class Swap{
public static void main(String[] args){
int a = 5;
int b = 0;
a = a*b;
b = a/b;
a = a/b;
}
}
这将生成一个ArithmeticException。我的问题是,如何使用try和catch块来解决这个问题。使用乘法和除法交换两个数字
class Swap{
public static void main(String[] args){
int a = 5;
int b = 0;
a = a*b;
b = a/b;
a = a/b;
}
}
这将生成一个ArithmeticException。我的问题是,如何使用try和catch块来解决这个问题。使用乘法和除法交换两个数字
你可以写这样的事情,这将处理部门
你零异常情况在你调用函数做这样
if (x==0 || y == 0){
swap(x+1,y+1,1); // Increment 1 so that it won't through exception
}
else{
swap(x,y,0);
}
现在创建一个交换功能
void swap(int x, int y, bool isSomeOneZero){
x = x * y; // x now becomes 50
y = x/y; // y becomes 10
x = x/y; // x becomes 5
if (isSomeOneZero){
x = x - 1; // Decrement value by 1 which is incremented previously
y = y - 1 ;
}
printf("After Swapping: x = %d, y = %d", x, y);
}
希望这可以帮助你。
正如其他人已经说过,使用乘法和除法逻辑交换两个数字不是一个好方法。有更好更直接的算法可以做到这一点。然而,如果你必须使用你的方法来做,也许是因为练习或家庭作业的分配,你可以将数字增加1,如果它是零,然后执行你的逻辑,最后减少另一个数字,因为它是交换,见下面的例子:
int a = 5;
int b = 0;
boolean aplus = false;
boolean bplus = false;
if (a == 0) {
a++;
aplus = true;
}
if (b == 0) {
b++;
bplus = true;
}
a = a*b;
b = a/b;
a = a/b;
if(aplus)b--;
if(bplus)a--;
你想除以0,这是无意义的。我认为你需要重做你的算法。捕获该错误将无济于事。 – Carcigenicate
只需将'b'更改为非零值,并且您的代码应该可以工作。顺便说一句,这可能不是交换两个数字的好方法。 –
你需要通过应用数学基础来解决它,例如:除以零是不允许的。异常不是解决您的问题。当你知道“某些事情可能出错”时,你会使用一个异常,而不是保护自己免受明显错误的代码侵害。你保护自己不被零除的方法是检查是否(b!= 0),但是如你自己声明的那样,它将是非存在的。 –