我正在通过以前的试卷努力积累我的 Java 经验。 这个特定问题有两个答案。第一个是我自己的,看起来很简单,第二个是我的讲师的,在我 Java 开发的这个特定阶段,这似乎让我感到困惑。
这是我的代码:
public class InClassTestTwoQ2
{
public static void main(String[] args){
double sum = 3.14;
System.out.println(test(sum));
System.out.println(testTwo(sum));
}
public static boolean test(double sum){
return sum != 3.14; //My boolean test return type
}
public static boolean testTwo(double sum){
return Math.abs(sum - 3.14) > 1e-14; //Lecturer boolean test return type
}
}
在这里使用 Math.abs 是更好的选择吗?另外,我不确定 1e-14 在做什么? 有人可以解释为什么我的讲师以这种方式返回他的 boolean 语句的任何可能性吗?我的似乎很直接,因为我永远不会按照他的方式去做?
此外,请原谅我的代码中的任何错误。我还在学习Java。 非常感谢。
最佳答案
为了让您大致了解为什么讲师的答案更好,而您的答案却不像您想象的那么简单,请考虑以下因素:
3.1444440 和 3.1444441
它们相等吗?那么在 Java 中,如果您简单地通过 ==
比较它们,那么您将得到 false
。这就是为什么你不应该将 double /浮点类型与 ==
进行比较。比较 float 类型的最佳方法是使用 tolerance value
。您想要测试减去两个 float 类型的结果是否在该公差值之内。例如,您的老师使用的公差值是 1e-14
。因此,如果 sum-3.14
在容差值内,则认为这两个数字相等。
另请注意,Math.abs
为您提供减法的绝对
值,因此您永远不会得到负数,否则您不会得到正确的结果。
希望这能给您一个概览。
关于java - 测试先前声明的变量总和是否不等于 3.14 的 boolean 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15460764/