2012-02-09 37 views
0

ナットシェルの問題があります。私はJavaで基本的な電卓を作っており、数値が入力されたときに電卓を0に戻そうとしています。これを0で割ったものです。エラーメッセージが表示されるたびに!数値を0で割ったときに電卓に0を返そうとするとエラーメッセージではない?

class Calculator 
{ 

long sum; 

public void evaluate(char action, long number) 
{ 
    if (action == '+') 
    { 
     sum = number + number; 

    } 

    if (action == '-') 
    { 
     sum = number - number; 

    } 

    if (action == '*') 
    { 
     sum = number * number; 

    } 

    if (action == '/') 
    { 
     sum = number/number; 

    } 

    **if (sum == number/0) 
    { 
     sum = 0; 
    } 
}** 
+1

あなただけの1つの数を定義し、これを2回でしょうか?ゼロによる除算を避けたい場合は、数値== 0 ... –

+3

をテストします。したがって、0,1、n-squaredまたは2nを返すことができる基本的な電卓を作ったので、それを間違って返すようにします特定のシナリオで答えますか? WTF? –

+0

0を任意の数で割った値==無限大。ゼロエラーによる除算が一般的です。これは、あなたのキャリア全体でテストする必要があるケースです。 – superluminary

答えて

0

私はちょうどあなたの部門コードにこのロジックを追加したい:また

if (action == '/') 
{ 
    if (number == 0) 
    { 
     sum = 0; 
    } else { 
     sum = number/number; 
    } 
} 

を、なぜあなたは、操作ごとに同じ番号を使用していますか?減算演算子は常に0を返します。このコードを電卓で使用している場合は、分母が0かどうかを確認してください。 ternaryオペレータと

+0

問題はx/0!= 0です。無限大です。 – superluminary

+0

除算演算子(数学的に)はゼロに対して全く定義されていません。 'b - > + 0 'としての' a/b'の*制限*は 'inf'ですが、ゼロで割ることは定義されていません。 – Blender

0
if (action == '/') 
{ 
    if(number2 == 0) 
    { 
     System.out.println("You cannot divide by 0!"); 
     return; 
    } 
    sum = number1/number2; 
} 
1

if (action == '/') { 
    sum = number == 0 ? 0 : number/number; // <-- isn't that just 1 ? 
} 
0

IEEE 754規格は、符号および大きさで構成されて正と負の数だけでなく、正と負のゼロ、正および負の無限大だけでなく、 、特別なNot-a-Number値(以下、NaNと略記)などがあります。 NaN値は、0をゼロで割るなどの無効な操作の結果を表すために使用されます。 float型とdouble型のNaN定数は、Float.NaNとDouble.NaNとしてあらかじめ定義されています。

条件を追加する必要があります。ゼロで除算していないことを確認してください。

if(secondnumber == 0) 
    { 

     return; 
    } 
0

完全性のために、例外をキャッチして(そしてJavaコーディング規則を使用して)どうしたらよいですか?

if (action == '/') { 
    try { 
     sum = number/number; 
    catch (ArithmeticException e) { 
     //log error 
     sum = 0; 
    } 
} 

ここでのボーナスは、他に何が起こる可能性があるかを処理することです。

0

簡単なチェック:

public double div(char action, int numerator, int dinominator){ 

    double ans=0; 

    if(action == '/'){ 

    if(dinominator == 0){ 
     ans=0; 
    } else { 
     ans = numerator/dinominator; 
    } 

    } 
    return ans; 
} 
関連する問題