我希望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