读书人

scanner不会跳过扫尾的amp;#39;\namp;#39;而

发布时间: 2012-07-30 16:19:05 作者: rapoo

scanner不会跳过结尾的'\n',而nextLine()的作用是跳过'\n'并返回被跳过的字符串

Scanner sc = new Scanner(System.in);

int conditon2 = sc.nextInt();
switch (conditon2) {
case 1:
for (int i = 0; i < theory.length ; i++) {
if (theory[i] == null) {
System.out.print("请输入课程编号:");
courseID = sc.nextLine();
System.out.print("请输入课程名字:");
courseName = sc.nextLine();
break;

}

break;

default:

break;
}
}

为什么,当程序运行时,输入 1,按回车后,

直接显示 请输入课程编号: 请输入课程名字:


你用sc.nextInt()读一个int时如果是在一行上输入,然后按enter结束,scanner不会跳过结尾的'\n',而nextLine()的作用是跳过'\n'并返回被跳过的字符串,所以你下次nextLine()的调用由于缓冲区里已经有一个'\n',所以就直接跳到输入课程名字去了。
解决方法是在nextInt()后加一句nextLine():


Scanner sc = new Scanner(System.in);

int conditon2 = sc.nextInt(); sc.nextLine(); // 跳过'\n'
switch (conditon2) {
case 1:
for (int i = 0; i < theory.length ; i++) {
if (theory[i] == null) {
System.out.print("请输入课程编号:");
courseID = sc.nextLine();
System.out.print("请输入课程名字:");
courseName = sc.nextLine();
break;

}

break;

default:

break;
}
}



读书人网 >编程

热点推荐