问题一:回车带来的异常
public static void main(String[] args) {
int duration=-1;
String language="默认";
Scanner input=new Scanner(System.in);
System.out.println("请输入电影时长");
if(input.hasNextInt()) {
duration=input.nextInt();
}
System.out.println("请输入电影语言版本");
if(input.hasNextLine()) {
language=input.nextLine();
}
System.out.println("\n\n电影时长为:"+duration);
System.out.println("语言版本为:"+language);
input.close();
}
- 运行结果:

- 可以看到语言版本没有输入就跳过了
- 而且语言版本的值也不是默认值
- 而是一个空值
- 实际上是一个回车
- 这是因为nextInt不接收回车,所以之后的语句会接收回车,然后跳过
解决办法:
public static void main(String[] args) {
int duration=-1;
String language="默认";
Scanner input=new Scanner(System.in);
System.out.println("请输入电影时长");
if(input.hasNextInt()) {
duration=input.nextInt();
}
System.out.println("请输入电影语言版本");
if(input.hasNextLine()) {
language=input.nextLine();
language=input.nextLine();
}
System.out.println("\n\n电影时长为:"+duration);
System.out.println("语言版本为:"+language);
input.close();
}
- 运行结果:

问题二:输入字符带来的异常
public static void main(String[] args) {
System.out.println("\n欢迎来到天堂大学\n");
System.out.println("1.学生登录");
System.out.println("2.教师登录");
System.out.println("3.退出");
Scanner input=new Scanner(System.in);
int oprtNumber=0;
while(true) {
System.out.println("请输入对应操作的序号:");
if(input.hasNextInt()) {
oprtNumber=input.nextInt();
}
if(oprtNumber>=1&&oprtNumber<=3) {
break;
}
System.err.println("您的输入有误,请重新输入");
}
System.out.println("输入正确!!");
input.close();
}
- 运行结果:(正常输入)

- 运行结果:(输入字符)

- 输入字符之后程序会进入死循环
- 即字符q没有被nextInt接收,而滞留在输入流中
- 再次循环,hasNextInt发现输入流中有东西(它不知道自己刚才拒绝了字符q)
- 但是却不是一个int值,再次拒绝接收,q又被滞留在输入流中……
- 循环往复,就形成了死循环
解决办法
public static void main(String[] args) {
System.out.println("\n欢迎来到天堂大学\n");
System.out.println("1.学生登录");
System.out.println("2.教师登录");
System.out.println("3.退出");
Scanner input=new Scanner(System.in);
int oprtNumber=0;
while(true) {
System.out.println("请输入对应操作的序号:");
if(input.hasNextInt()) {
oprtNumber=input.nextInt();
}else if(input.hasNextLine()){
String ss=input.nextLine();
}
if(oprtNumber>=1&&oprtNumber<=3) {
break;
}
System.err.println("您的输入有误,请重新输入");
}
System.out.println("输入正确!!");
input.close();
}
- 运行结果:
