gpt4 book ai didi

java - 检查不需要的输入(错误处理)

转载 作者:行者123 更新时间:2023-12-03 08:51:43 25 4
gpt4 key购买 nike

我想检查我的代码需要的输入是否正确,所以我放了很多 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 时,它根本没有做任何事情。一片空白……
我做了 >= 应该检查它是否大于或等于,而 <= 应该检查它是否小于或等于。那是错的吗?

最佳答案

好吧,首先,您似乎只需要小于或等于 91 的整数的输入。
您会这​​样说似乎很奇怪,但随后使用 Scanner 的 nextDouble() 方法显式获取 double 。

有更好的检查整数的方法...见这个问题 What's the best way to check to see if a String represents an integer in Java?

无论哪种方式,我都会假设您打算坚持您的创新方法:

你是对的,在 常规数学 , 9.1 四舍五入到 9,两者之差小于等于 0.1。您的案例应该有效。

但是欢迎来到 Java 浮点代数的世界! double 不好比较这里。
我的意思是他们不能很好地比较?好吧,您的“9.1”和“9”之间的差异实际上是 0.09999999999999964,而不是 1。
当您使用基本比较器时,Java 不会对此进行补偿,因此您的比较失败。

希望没有失去!有比使用常规比较运算符更好的比较 double 数的方法。
介绍.... Double.compare()!!您可以阅读有关该方法的 javadocs,或者您可以在此处获取有关该方法的作用的信息:some reliable tutorial site

但是,如果他们输入 9.0001 会怎样?即使比较按您的预期进行,您的测试也会失败。你真的应该在这里重新考虑你的数学。如,试试这个:

Double.compare((n - Math.round(n)),0.0) != 0)

关于java - 检查不需要的输入(错误处理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39170876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com