Java常见输入问题

博客主要探讨了编程中输入带来的异常问题。一是回车带来的异常,nextInt不接收回车,导致后续语句接收回车并跳过;二是输入字符带来的异常,字符未被nextInt接收,滞留在输入流中,造成程序死循环,还提及了相应解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题一:回车带来的异常

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(); 
}
  • 运行结果:
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值