在Java中验证扫描仪输入

时间:2013-10-23 22:23:42

标签: java validation input

如果输入非数字值,如何阻止程序崩溃?我知道kbd.hasNextLong,但我不确定如何实现它。

2 个答案:

答案 0 :(得分:1)

这是验证它的方法:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    boolean end = false;
    long value;
    while (end == false) {
        try {
            value = input.nextLong();
            end = true;
        } catch (InputMismatchException e) {
            System.out.println("Please input the right LONG value!");
            input.nextLine();
        }
    }
}

请注意catch-statement中的input.nextLine()。如果你输入一些非int文本,它会跳转到catch(导致Integer无法在nextInt中读取),它会打印出来,然后再次进入。但键入的值并不会消失,所以即使你什么都不做,它也会再次崩溃。

input.nextLine()“刷新”你放入的内容。

使用hasNextLong是另一种方式(但我更喜欢抛出异常,因为它是一个例外):

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    boolean end = false;
    long value;

    while (end == false)  {
        if (input.hasNextLong()) {
            value = input.nextLong();
            end = true;
        } else {
            System.out.println("input the LONG value!");
            input.nextLine();
        }
    }
}

答案 1 :(得分:-1)

一个简单的解决方案是使用例外。

int value;
do {
    System.out.print("Type a number: ");
    try {
        value = kbd.nextInt();
        break;
    }
    catch(InputMismatchException e) {
        System.out.println("Wrong kind of input!");
        kbd.nextLine();
    }
}
while(true);