我有一个名为Rectangle的类。该类有两个属性width和height。 我需要检查Rectangle类是否具有黄金比例(高度/宽度= 1.6),如果是,我需要返回true,否则返回false。
这是我的班级:
class Rectangle {
private int x, y;
private int height, width;
public boolean isGoldenRatio()
{
return (height / width == 1 && height % width == 6);
}
}
我创建了函数isGoldenRatio()来检查边的比例。 但我认为这是错误的,因为我没有得到理想的结果。
更新 我不能在我的班级中定义添加字段,我不能使用数学库。
知道如何修复这个功能吗?
答案 0 :(得分:3)
为了避免浮动问题,您可以使用数学,只需执行
return (height * 10) == (width * 16);
为了解释它,你得到了等式:
H / W = 1.6 / multiply by 10
10 * H / W = 16 / multiply by W
10 * H = 16 * W
答案 1 :(得分:0)
如果你想要那个数字,你可以改变它以将它们转换成双倍并像这样比较
public boolean isGoldenRatio()
{
return ((double)height / width == 1.6);
}
答案 2 :(得分:0)
你需要做的就是除法,然后先将分子强加到float
。你还需要决定它与金色的接近程度。
class Rectangle {
private int x, y;
private int height, width;
private final static float FLOAT_THRESH = .01;
public boolean isGoldenRatio()
{
return Math.abs(1.6 - (float)height / width) < FLOAT_THRESH;
}
}
答案 3 :(得分:0)
使用数学来避免使用浮点数。斐波纳契数的比率接近分母平方内的黄金比率。 e.g。
1/1, 2/1, 3/2, 5/3, 8/5, 13/8, ...
分别在黄金比例的1 / 1,1 / 1,1 / 4,1 / 9,1 / 25,1 / 64,......之内。
所以你可以用整数或有理数来完成数学运算。
如果你希望在21/13
附近的两个小数点之内。所以检查是否
-1 <= 21*height - 13*width <= 1
反之亦然,高度和宽度互换。