2012-01-26 27 views
1

分数を変更するプログラムを作成しようとしていますが、 " - "ネガティブが1回だけ正しく出力されるようにする必要があります。ユーザーが分子と分母を入力し、それらを両方とも負として入力すると、-1/-2を表示できません。ただ1つのネガと同じですが、私は1/-2を表示できません。私が思いついた解決策は、Math.absを使ってnumとdenの両方からネガを取り除いてから、IF Math.absを一度だけ利用しなければならないときに、そのネガを追加することです。 2回使用した場合は、numとdenを出力し、負の値を取り除くだけのロジックを追加します。 Math.absがどのくらいの頻度で利用されたかをカウントし、numまたはdenのいずれかまたは両方に対して正の数を入力した場合に誤検出を防ぐ方法を教えてください。Java:Math.absを使用し、後で使用するために使用された頻度のカウントを維持する

私のコードは現時点では絶対値に変換する作業しか行っていないので、カウントを保持するために表示するものは何もありません。

snum = Math.abs(num); 

* numはユーザーが入力した数値で、snumは変換された絶対値です。

ご協力いただければ幸いです。

おかげで、 INGUES

+1

この宿題はありますか?もしそうなら、タグ:[タグ:宿題]をしてください。 –

答えて

0

擬似コード:

if numerator < 0 and denominator < 0 then 
    numerator = -numerator 
    denominator = -denominator 
    sign = '+' 
elsif numerator < 0 then 
    numerator = -numerator 
    sign = '-' 
elsif denominator < 0 then 
    denominator = -denominator 
    sign = '-' 
end if 

print sign, numerator, '/', denominator 
+0

これは完璧に機能しました!ありがとうございました! – INGUES

0

はありません、そのまま内部表現にマイナス記号を残して、それが壊れてしまっただけ出力されます。ここに私の解決策は次のとおりです。

String sign = (num * denom < 0)? "-" : ""; 
System.out.println(sign + Math.abs(num) + "/" + Math.abs(denom)); 
+0

denomが0の場合、ソリューションでDivideByZero例外が生成される可能性があります。 –

+0

@EricB。 - 私は乗算を使用していた以前のバージョンに復元しました。私はOPのチェックがどこか早く 'denom'と判断しています。 –

+0

もちろん、あなたはmax-intまたはmax-longの範囲を越えることができるようになりましたが、今は反対の問題があります(ありそうもありません)。しかし、クイックテストでは、Long.MAX_VALUE^2 = 1というエラーは発生しないことが示されています。しかし結果の符号がまだ正確であるかどうかはわかりません。私は最良の選択肢は 'denom!= 0'を先にチェックすることに同意します。 –

5

分母はちょうど両方の兆候を反転、負の場合。

+0

速く、簡単で、簡潔な解決策。私の意見では最高のものです。 –

関連する問題