我需要检查用户是否在java中输入数值。我一直在尝试使用hasNextDouble但是使用hasNextDouble方法得到了奇怪的错误,我不确定这是执行此检查的方法。
请注意我不能使用while循环或任何其他高级方法,除非。
import java.util.Scanner;
import java.lang.Math;
public class CentimeterInch
{
public static void main (String [] args)
{
final int MAX=100, feet=12, meter=100;
final double inch=2.54;
Scanner scan = new Scanner (System.in);
System.out.println ("This program converts distances. ");
System.out.println ("Enter distance and unit (e.g. 37 1 or 100 2):");
double distance=scan.nextDouble();
if (!scan.hasNextDouble())
{
System.out.println ("please enter a numeric value");
distance=scan.nextDouble();
}
int unitType = scan.nextInt();
if (distance<0)
{
System.out.println ("Please enter a non negative distance");
}
....
我修正了错字但它仍然无法正常工作,当我输入例如“a”时它会崩溃。对我来说,在将值放入'double distance'变量之后调用hasNextDouble也没有意义,但我还没有找到任何其他方法。 我只有1个双变量来检查,'int'不需要验证。
编辑: 我前进了一点。现在它在崩溃之前显示错误。如何让它不崩溃但再次获取变量?
if(!scan.hasNextDouble())
System.out.println ("please enter a numeric value");
distance=scan.nextDouble();
谢谢!
答案 0 :(得分:0)
应该是scan.hasNextDouble()
,重点是 D ouble。
答案 1 :(得分:0)
抛开错别字,您在消费hasNextDouble
后调用nextDouble
。
在一行中获取两者的最简单方法是:
if (scan.hasNextDouble()) {
// TODO something
double foo = scan.nextDouble(); // this consumes the first double
}
else { // TODO exit with error }
if (scan.hasNextDouble()) {
// TODO something else
double bar = scan.nextDouble(); // this consumes the second double
}
else { // TODO exit with error }
如果您想要两个gos(即用户按两次输入),您可以使用scan.next()
两次,并在Double.parseDouble
上使用String
,同时抓住NumberFormatException
格式错误。