我想检查我的代码所需的输入是否正确所以我把很多if语句检查了要求,我无法弄清楚它为什么不起作用。它应该检查n是否小于或等于91和/或它是小数(我不希望我的输入也是)。这样,用户不会通过输入小数或高于91的数字来破坏程序。
while (Error == 1) {
n = user_input.nextDouble();
if ((n - Math.round(n) <= 0.9) && (n - Math.round(n) >= 0.1)) {
System.out.println("Error: No Decimal points please, try again");
continue;
}
if ((n - Math.round(n) <= 0.9) && (n - Math.round(n) >= 0.1) && (n > 91)) {
System.out.println("Error: No Decimal points please, try again");
System.out.println("Error: Number too high, try again");
continue;
}
if (n > 91) {
System.out.println("Error: Number too high, try again");
continue;
}
if (n == Math.round(n)) {
Error = 0;
}
if (n == 0) {
break;
}
}
出于某些原因,当我输入9.1或9.9时,它根本不做任何事情。这是空白的...... 我做了&gt; =应该检查它是否大于或等于&lt; =应该检查它是否小于或等于。这是错的吗?
答案 0 :(得分:0)
如果是pip install pydotplus
和9.1
,则不满足任何条件。这就是为什么没有做到的原因。迭代循环并等待下一个双输入。
这里,主要罪魁祸首是9.9
。计算不准确。例如,在9.1的情况下:
n - Math.round(n)
值等于0.09999999999999964。因此,条件n - Math.round(n)
永远不会满足,如果达到阻止则不会。
答案 1 :(得分:0)
嗯,首先,您似乎只想要整数小于或等于91的输入。 你会说这个似乎很奇怪,但是然后使用Scanner的nextDouble()方法明确地获取双打。
有更好的方法可以检查整数...请参阅此问题What's the best way to check to see if a String represents an integer in Java?
无论哪种方式,我都会假设您打算坚持使用创新方法:
你是对的,在 常规数学 中,9.1轮到9,两者之间的差异小于或等于0.1。您的案例应工作。
但欢迎来到Java浮点代数的世界! 这里的双打比较好。 我的意思是他们没有比较好吗?那么,'9.1'和'9'之间的差异实际上是 0.09999999999999964 ,而不是1。 当您使用基本比较器时,Java不会对此进行补偿,因此您的比较失败。
希望不会丢失!比使用常规比较运算符有更好的比较双精度的方法。 介绍...... Double.compare()!!您可以阅读该方法的javadoc,或者您可以到此处获取有关该方法的功能的信息:some reliable tutorial site
然而,如果输入9.0001 怎么办?即使比较按照您的预期进行,您的测试也会失败。你真的应该在这里重新思考你的数学。如同,请尝试这样做:
Double.compare((n - Math.round(n)),0.0) != 0)