2017-09-17 6 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ブロックを使ってこの問題を解決する方法です。乗算と除算を使用して2つの数値を入れ替えます

+3

0で除算しようとしていますが、無意味です。私はあなたのアルゴリズムを再加工する必要があると思います。そのエラーをキャッチすることは何の役にも立たないでしょう。 – Carcigenicate

+0

'b'をゼロ以外の値に変更するだけでコードが機能します。ちなみに、これはおそらく2つの数字を交換する良い方法ではありません。 –

+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

すでに述べたように、乗算と除算ロジックを使用して2つの数値を交換するのは良いアプローチではありません。それを行うのに利用できるはるかに優れたアルゴリズムがあります。

しかし、練習や宿題の割り当てのためにあなたの方法を使用しなければならない場合、ゼロの場合は数字を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--; 
関連する問題