我希望printn方法給我「Asterix」和「Oberlix」,因爲3/4與6/8相同。正確執行equals() - 分數的方法
HashMap hm = new HashMap();
hm.put(new Fraction(3, 4), "Asterix");
hm.put(new Fraction(19, 12), "Oberlix");
System.out.println(hm.get(new Fraction(6, 8)));
System.out.println(hm.get(new Fraction(38, 24)));
所以這是我是如何實現的等號方法:
public boolean equals(Object obj) {
boolean isEqual = false;
if(obj instanceof Fraction) {
Fraction frac = (Fraction) obj;
if(((double) this.numerator/(double) this.denumerator) == ((double) frac.numerator/(double) frac.denumerator)) {
isEqual = true;
}
}
return isEqual;
}
很顯然,我做錯了什麼事,因爲這不工作,我的打印方法返回「空」。我的想法是,如果我將這兩個分數的分子和分母分開,結果必須相等,如果分數相等(3/4與6/8相同)。
對不起,我猜這個錯誤肯定是顯而易見的,但我找不到它。
首先權力的有限數量的總和近似,你需要重寫和實現'基於散列的集合hashCode'。其次,我強烈建議你用'Map'使用通用參數化。 – Mena 2014-09-01 12:19:06
對於初學者來說,由於舍入錯誤,您無法可靠地使用相等性來比較浮點數。 – chrylis 2014-09-01 12:19:07
永遠不要使用具有浮點值的'=='... – ortis 2014-09-01 12:21:16