本帖最后由 luheqi 于 2014-7-2 10:50 编辑
nextInt() 接收一个整型字符,nextline()读入一行文本,会读入"\n"字符,但"\n"并不会成为返回的字符
串值的一部分
如下代码:
int n = sc.nextInt()
String s1 = sc.nextLine();
String s2 = sc.nextLine();
假设输入:
42
and don't you
forget it
在这种情况下,n的值为42,s1设置为空白字符,s2设置为and don't you
因为nextInt()读入42,但并没有读入"\n",因此S1调用42所在行的剩余部分所以,nextInt()等deng要和nextLine()等混用的即觉方法就是:
在每一个next()、nextInt()、nextDouble()等后加一条nextLine()语句,将被next()去掉的Enter过滤掉。也就是说nextLine()有吃掉回车的作用。
所以把前面代码的第12行去掉,如果输入的不是整数,其实还有数据在其中没清除,nextInt一直会读到那个错误的数据,所以会死循环。
加入nextLine后,会把刚刚输入的错误数据越过读入,重新进入输入等待。
把 上面的修改成下面的,调试就知道了:
Scanner input = new Scanner(System.in);
int num = 0;
while (true) {
try {
System.out.println("请输入一个整数:");
// num =Integer.parseInt( input.nextLine());
num = input.nextInt();
if (num == 0) break;
} catch (InputMismatchException e) {
System.out.println("必须输入整数!请重新输入:");
String str = input.nextLine();
System.out.println(str);
}
}
结果:
请输入一个整数:
4
请输入一个整数:
sdfdsf
必须输入整数!请重新输入:
sdfdsf
请输入一个整数:
32
请输入一个整数:
|