使用扫描程序验证用户输入

时间:2014-04-11 19:31:40

标签: java validation input java.util.scanner user-input

我很难弄清楚如何正确使用扫描仪来验证用户输入。例如,程序需要有一个用户输入int,用户只能输入正数,如果用户输入“apple”,“美味苹果”或负数,问题就会显示错误信息。我已经尝试了下面的代码,然后我发现了一个令人不安的问题,“这不是一个数字!”打印两次,我不知道是什么导致了这个问题......

import java.util.*;
public class input {
    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        int number;

        do {
            System.out.println("Please enter a positive number!");
            while (!sc.hasNextInt()) //scan
            {
                System.out.println("That's not a number!");
                sc.nextLine();  //scan
            }
            number = sc.nextInt();

        }
        while (number <= 0);

        System.out.println("Thank you! The positive number is " + number);
    }
}
  

Here is the result:
Please enter a positive number!
dfd
That's not a number!
-2232
Please enter a positive number!
dfd dfd
That's not a number!
That's not a number!

我意外地通过在“number = sc.nextInt()”下面添加额外的代码来解决问题,现在我的代码变成了:

import java.util.*;

public class input {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int number;

        do {
            System.out.println("Please enter a positive number!");
            while (!sc.hasNextInt()) //scan
            {
                System.out.println("That's not a number!");
                sc.nextLine();  //scan
            }
            number = sc.nextInt();
            sc.nextLine();  //scan

        }
        while (number <= 0);

        System.out.println("Thank you! The positive number is " + number);
    }
}
  

Here is the result:
Please enter a positive number!
dfd
That's not a number!
-2323
Please enter a positive number!
dfd dfd
That's not a number!
fdfd 322
That's not a number!
23 sdfd
Thank you! The positive number is 23

这次“那不是一个数字”只打印了一次,但我真的不明白为什么通过把“sc.nextLine()”帮助解决问题......

然而,我又提出了另一个问题,如果我还要在输入类似“23 sdfd”,“23 2323”的内容时验证用户输入,该问题仍然提供了提示用户重试的信息直到他们输入正确的int?

1 个答案:

答案 0 :(得分:0)

这是因为number = sc.nextInt();在您输入-2232后没有使用换行符。所以它评估了换行符,确定它不是int,并提示“那不是数字!”。然后你输入dfd dfd,它确定那不是一个int,并提示“那不是一个数字!”试。

您的编辑通过在int中读取后使用换行符来解决问题。

请参阅Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods