如何在不退出错误的情况下检查用户输入

时间:2015-10-31 15:22:45

标签: java validation input

如果值不是数字,我需要检查用户输入并要求输入正确的输入。但是,当我执行此代码时,程序显示错误消息然后崩溃 - 它不会要求用户提供新输入。怎么能修好?谢谢!

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");
            }
....

1 个答案:

答案 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 2scan.hasNextDouble()检查下一个要读取的令牌是否为双倍值。它不是,所以scan.hasNextDouble()求值为false并执行if子句。在if子句中,您有scan.nextLine()。它只是丢弃scan的当前输入,从而刷新scan。如果您不这样做,则scan仍然包含abc 2,并且在执行distance = scan.nextDouble()时,编译器会发出错误。

最好将if替换为while。假设用户提供了错误的输入。您的程序检查输入并发现它不是double值。如果执行if子句,则要求用户输入数值。如果用户再次输入错误的输入怎么办?这一次,你会收到一个错误。使用while循环可以让程序在输入数值之前不断询问用户输入是否正确。