2012-01-26 11 views
1

我正在嘗試編寫修改分數的程序,並且需要確保「 - 」負數只能正確輸出一次。如果用戶輸入一個分子和一個分母,並把它們都作爲負數,我不能顯示-1/-2。同樣只有一個否定,我不能顯示1/-2。我提出的解決方案是通過使用Math.abs從num和den中移除負數,然後在輸出期間添加負數IF Math.abs只需使用一次。如果它被使用了兩次,我將包括邏輯,只輸出數字和書房負數刪除。 如何計算Math.abs的使用頻率,並防止在用戶爲num或den或兩者輸入正數時出現誤報。Java:使用Math.abs並保留它被用於以後使用的頻率

我現在的代碼只做轉換爲絕對值的工作,所以我沒有什麼可以顯示保持計數。

snum = Math.abs(num); 

*其中num是用戶輸入的數字,snum是abs轉換的數字。

任何幫助,將不勝感激。

感謝, INGUES

+1

這功課嗎?如果是這樣,請標記:[標籤:家庭作業]。 – 2012-01-26 22:34:14

回答

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 2012-01-27 01:22:57

0

否,讓減號在內部表示完好,它僅僅是被損壞的輸出。這裏是我的解決方案:

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

如果denom是0 – 2012-01-26 22:42:53

+0

@EricB,您的解決方案可以創建DivideByZero異常。 - 我恢復到以前使用乘法的版本。我假設OP在早些時候檢查'denom'。 – 2012-01-26 22:46:59

+0

當然,你現在有相反的問題(儘管不太可能),你可以超越max-int或max-long的界限。雖然,快速測試顯示它不會產生錯誤 - Long.MAX_VALUE^2 = 1.但是,我不知道合成符號是否仍然必須準確。我同意最好的選擇是先檢查'denom!= 0'。 – 2012-01-26 22:56:11

5

如果分母爲負,只需扳動兩者的跡象。

+0

快速,簡單,簡潔的解決方案。我認爲最好的一個。 – 2012-01-26 22:43:23