我试图制作一个简单的用户界面,要求用户输入双精度数字,如果他们的输入不是双精度数字,程序应该一直打印提示,直到用户输入一个有效的双精度数字。我下面的代码还不能正常工作,因为当用户键入有效的double类型时,除非用户键入另一个double类型的数字,否则程序不会执行任何操作。我猜while循环中的条件(sc.hasnextdouble())将使用第一个有效输入。如何纠正?谢谢
Scanner sc = new Scanner(System.in);
System.out.println("Type a double-type number:");
while (!sc.hasNextDouble())
{
System.out.println("Invalid input\n Type the double-type number:");
sc.next();
}
userInput = sc.nextDouble(); // need to check the data type?
5条答案
按热度按时间ih99xse11#
由于可能无法输入双精度,最好读入字符串,然后尝试将其转换为双精度。标准模式是:
在输入一个double之后,循环才能退出
userInput
将保持该值。还要注意,通过将提示放在循环中,可以避免在无效输入上重复代码。
wko9yo5t2#
你的代码工作得很完美:http://ideone.com/nn42ug 以及http://ideone.com/mvbjmz
对于此输入:
给予:
这是正确的,因为
49,5
不是十进制数,因为它使用了错误的分隔符。daolsyd03#
我会这样做,对于int和double,我会四舍五入检查它是否仍然是一样的。。
下面是一种检查输入是int、double、string还是character的方法
jjhzyzn04#
那怎么办
Double.parseDouble(stringInput);
当您将输入扫描为一个字符串时,您可以解析它以查看它是否是一个double。但是,如果将此静态方法调用 Package 在try-catch语句中,则可以处理不解析双精度值的情况。5ssjco0h5#
我认为你的代码不工作的原因是首先它会检查给定的输入是否是double类型(
sc.hasNextDouble()
)如果没有,则再次输入(sc.hasNext()
... 不使用这一行),然后再次输入(userInput = sc.nextDouble()
)我建议这样做:
如果你第一次提供双重输入,你需要再次提供输入,我认为如果你在任何时候提供双重输入,那么你必须再次提供,看起来不可能只提供一次输入。