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),但是如你自己聲明的那樣,它將是非存在的。 –