0

我正在使用以下代码向用户询问他们的身高(以英尺和英寸为单位),如果用户的输入不是 int,则返回错误消息:

loop = true;
while(loop){
    if(input.hasNextInt()){
        feet = input.nextInt();
        loop = false;
        break;
    }
    else{
        System.out.println("Invalid input, please enter an integer.");
        System.out.print("Feet: ");
        input.nextLine();
    }
}

loop = true;
System.out.print("Inches: ");

while(loop){
    if(input.hasNextInt()){
        inches = input.nextInt();
        loop = false;
        break;
    }
    if(!input.hasNextInt()){
        System.out.println("Invalid input, please enter an integer.");
        System.out.print("Inches: ");
        input.nextLine();
    }
}

该程序完美地返回了英尺的错误消息:

Feet: f
Invalid input, please enter an integer.
Feet:

但是第一次返回英寸的错误消息时,它返回了两次:

Inches: f
Invalid input, please enter an integer.
Inches: Invalid input, please enter an integer.
Inches:

此错误仅在用户第一次输入整数以外的内容时发生。我怎样才能摆脱这个?

4

2 回答 2

0

nextInt方法不消耗\n整数之后的字符。

在第二个循环中,当hasNextInt为假时,它读取一行。该行将是空的,因为它正在读取\n上次的决赛。

在循环的第二次迭代中,它会读取您输入的最后一行,并再次出错。

解决方法是始终使用nextLine()并使用Integer.parseInt(String);来获取整数。hasNextInt()不过应该仍然可以正常工作。

于 2013-09-09T20:01:19.447 回答
0

如果使用else英尺可以正常工作,为什么不再次使用英寸呢?

更改if(!input.hasNextInt())else应该可以解决问题。

于 2013-09-09T19:54:40.517 回答