前几天我遇到了一道数学题,并决定编写一些 Java 代码来找出答案。除了我的代码由于某些奇怪的原因无法工作。
问题是这样的:
这是我的代码:
public class Java {
public static void main(String[] args) {
double tLeft = 0;
double tRight = 0;
double bLeft = 0;
double bRight = 0;
while (bLeft - bRight != 6) {
tLeft += 0.1;
tRight = 8 - tLeft;
bLeft = 13 - tLeft;
bRight = 8 - tRight;
}
System.out.printf("Top Left = %f\nTop Right = %f\nBottom Left = %f\nBottom Right = %f\n\n", tLeft, tRight, bLeft, bRight);
}
}
这将循环遍历左上角数字的所有可能变化,并根据该数字给出数字。是的,我知道这是非常笨拙和糟糕的代码,但我仍在学习!
这里的问题是我的 IDE (Eclipse) 将无限循环并且不会退出循环并打印答案。如果我将 tLeft 更改为声明为 3 而不是 0,我会得到答案,但如果我更进一步将其声明为 2.7 而不是 3,Eclipse 会决定再次无限循环。
我向大家提出的问题是 Eclipse 为何以及何时决定无限循环,以及如何阻止它以获得我想要的答案?
附注这道数学题的答案是:
左上角 = 3.5
右上角 = 4.5
左下= 9.5
右下= 3.5
提前谢谢您!
最佳答案
如果您检查 bLeft - bRight
的值,由于浮点错误,它会打印出 5.9999999,而实际上应该是 6。
避免这种情况的一种方法是检查差异是否小于某个 epsilon。由于每次迭代值都会变化 0.1,因此我选择了 0.05。那么while语句的守卫就变成了:
while (bLeft - bRight - 6 < 0.05) {
避免此问题的另一种方法是使用 BigDecimal ,它使用更精确的 float 学。
类似的答案(特别是 Eric Weilnau's answer 相关问题)建议 The need for BigDecimal来说明为什么 BigDecimal 在这里有帮助。
关于java - 试图回答数学难题,但我的程序不会退出此循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50780077/