扫描仪输入验证Java

扫描仪输入验证Java,java,java.util.scanner,Java,Java.util.scanner,这是我的密码。我想确保它不会抛出异常,并不断要求用户输入正确的整数输入格式。但它一直在进入一个无限循环。Addinput.nextLine()到您的else块 这将允许您将下一个值放入缓冲区,而不是陷入无限循环。我认为正确的解决方案是: while(!isValid){ System.out.println("Enter house number: "); if(input.hasNextInt()){ houseNum=input.nextInt();

这是我的密码。我想确保它不会抛出异常,并不断要求用户输入正确的整数输入格式。但它一直在进入一个无限循环。

Add
input.nextLine()到您的
else


这将允许您将下一个值放入缓冲区,而不是陷入无限循环。

我认为正确的解决方案是:

while(!isValid){
    System.out.println("Enter house number: ");
    if(input.hasNextInt()){
        houseNum=input.nextInt();
        isValid=true;
    }
    else{
        System.err.print("Wrong input. Try again");
        isValid=false;
    }
}

无论读取数字是否成功,我都会从输入中跳过一行。如果没有读取数字,则跳过整个错误行;如果读取了一个数字,它只会跳过该数字后面的换行。

删除布尔标志。使用while(input.hasNextInt()
然后使用
input.nextInt()
hasNextInt())
正是这样做的……确保用户已经输入了一个有效的整数。无需对其进行验证。@LostMind and GhostCat我明白你的意思。但是,如果用户收到错误的输入,我希望它要求用户再次输入。
    while (!isValid) {
        System.out.println("Enter house number: ");
        if (input.hasNextInt()) {
            houseNum = input.nextInt();
            isValid = true;
        }
        else {
            System.err.print("Wrong input. Try again");
            isValid = false; // not really necessary; isValid was already false
        }
        input.nextLine();
    }