如果值不是数字,我需要检查用户输入并要求输入正确的输入。但是,当我执行此代码时,程序显示错误消息然后崩溃 - 它不会要求用户提供新输入。怎么能修好?谢谢!
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");
}
....
答案 0 :(得分:1)
在执行scan.nextDouble()
之前,只需带上if子句。
if (!scan.hasNextDouble())
{
System.out.println ("please enter a numeric value");
scan.nextLine();
distance=scan.nextDouble();
}
double distance=scan.nextDouble();
首先确保要读取的数字是double值,然后读取它。你正在做反向
scan.nextLine()
在这做什么?
假设用户输入abc 2
。 scan.hasNextDouble()
检查下一个要读取的令牌是否为双倍值。它不是,所以scan.hasNextDouble()
求值为false
并执行if子句。在if子句中,您有scan.nextLine()
。它只是丢弃scan
的当前输入,从而刷新scan
。如果您不这样做,则scan
仍然包含abc 2
,并且在执行distance = scan.nextDouble()
时,编译器会发出错误。
最好将if
替换为while
。假设用户提供了错误的输入。您的程序检查输入并发现它不是double值。如果执行if
子句,则要求用户输入数值。如果用户再次输入错误的输入怎么办?这一次,你会收到一个错误。使用while循环可以让程序在输入数值之前不断询问用户输入是否正确。