博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java常见输入问题
阅读量:3929 次
发布时间:2019-05-23

本文共 2704 字,大约阅读时间需要 9 分钟。

问题一:回车带来的异常

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()) {
//nextInt不接收/n,所以之后的语句会接收回车,然后跳过 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(); }
  • 运行结果:
    这里写图片描述
你可能感兴趣的文章
嵌入式系统分析与设计
查看>>
系统安全性分析与设计
查看>>
系统可靠性分析与设计
查看>>
命算占卜的理性分析
查看>>
关系模型详解
查看>>
java 类加载器的探究
查看>>
基于eclipse的JMH测试环境准备
查看>>
测试Java同步、锁、原子类的同步性能
查看>>
测试同步、锁、原子引用的性能
查看>>
java 字节码校验
查看>>
明日歌
查看>>
java Arrays.sort的使用问题
查看>>
java 类锁和对象锁的一段代码,不解释
查看>>
安全管理器与访问权限
查看>>
Linux 安装与多重引导摘要
查看>>
Linux 首次登陆与在线求助man page 摘要
查看>>
Linux 文件权限和目录配置
查看>>
在工作时走神的闪光
查看>>
Ajax使用注意事项
查看>>
FileChannel 专讲
查看>>