2017-09-17 65 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--;