java Scanner类的nextInt方法非法输入接受问题问题代码
package com.zy.code.t1; import Java.util.inputmismatchexception; import java.util.Scanner; public class demo1{ publicstaticvoidmain (string [ ] args ) scannerscanner=newscanner ) system.in; 布尔标志=真; while(flag ) { System.out.println ('请输入数字); int num=0 try { num=scanner.nextInt (; }catch(inputmismatchexceptione ) system.out.println ) e.tostring ('输出格式错误! ' ); //scanner.next (; }switch(num ) { case 1: System.out.println ('选项1 ); 布雷克; case 2: System.out.println ('选项2 ); 布雷克; case 3: flag=false; 布雷克; default: System.out.println ('重新输入); 布雷克; } } }} 结果:
原因
nextInt ) )方法直接接收整数数据。 如果输入非整数,则会发生异常,无法读取文本缓冲区的内容,文本缓冲区的内容也不会消失。 接下来是nextInt ) )方法时,由于文本缓冲区的内容仍保留为未读取,因此异常将继续发生,并按顺序循环。
解决方法
在catch中插入Scanner.next )方法,读取缓冲区的内容并清空缓冲区
package com.zy.code.t1; import Java.util.inputmismatchexception; import java.util.Scanner; public class demo1{ publicstaticvoidmain (string [ ] args ) scannerscanner=newscanner ) system.in; 布尔标志=真; while(flag ) { System.out.println ('请输入数字); int num=0 try { num=scanner.nextInt (; }catch(inputmismatchexceptione ) system.out.println ) e.tostring ('输出格式错误! ' ); //已处理输入的不合理值scanner.next (; }switch(num ) { case 1: System.out.println ('选项1 ); 布雷克; case 2: System.out.println ('选项2 ); 布雷克; case 3: flag=false; 布雷克; default: System.out.println ('重新输入); 布雷克; } } }} 结果
参考链接