2017-09-17 36 views
0
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块来解决这个问题。使用乘法和除法交换两个数字

+3

你想除以0,这是无意义的。我认为你需要重做你的算法。捕获该错误将无济于事。 – Carcigenicate

+0

只需将'b'更改为非零值,并且您的代码应该可以工作。顺便说一句,这可能不是交换两个数字的好方法。 –

+0

你需要通过应用数学基础来解决它,例如:除以零是不允许的。异常不是解决您的问题。当你知道“某些事情可能出错”时,你会使用一个异常,而不是保护自己免受明显错误的代码侵害。你保护自己不被零除的方法是检查是否(b!= 0),但是如你自己声明的那样,它将是非存在的。 –

回答

0

你可以写这样的事情,这将处理部门

你零异常情况在你调用函数做这样

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); 

} 

希望这可以帮助你。

0

正如其他人已经说过,使用乘法和除法逻辑交换两个数字不是一个好方法。有更好更直接的算法可以做到这一点。然而,如果你必须使用你的方法来做,也许是因为练习或家庭作业的分配,你可以将数字增加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--;