【Java】解决 nextLine() 在nextInt()后自动读回车的问题。认识next(), nextInt(), 和 nextLine() 的区别。

目录

一、基础知识

二、问题描述

三、解决方法


写在前面:

很多刚学java的小伙伴都会遇到这个问题:在使用 nextInt() 方法之后立即使用 nextLine() 方法时,程序不等待用户输入,自动结束。下面来教大家解决一下~

一、基础知识

要解决这个问题,得对这两个方法有一定了解。

1. 介绍nextInt():

  nextInt() 方法用于读取输入流中的下一个整数。它会扫描输入中的下一个标记,并将其解释为一个整数。如果输入中的下一个标记无法解释为整数,则 nextInt() 方法会抛出 InputMismatchException 异常。

2. 介绍nextLine():

  nextLine() 方法用于读取输入流中的下一行文本。它会扫描输入中的下一行,并将其返回为一个字符串。nextLine() 方法会读取输入流中的换行符,并将返回一个空字符串。在输入中有空行时,nextLine() 也会读取该空行并返回一个空字符串。

3.额外补充next():

  next() 方法用于读取输入流中的下一个单词(以空格为分隔符)。它会扫描输入中的下一个标记,并将其返回为一个字符串。next() 方法会忽略输入中的前导空白(空格、制表符等),并且只读取到下一个空白符之前的内容。因此,next() 方法通常用于读取单个单词或标记。

二、问题描述:

1.场景重现:

Scanner scanner =new Scanner(System.in);
System.out.println("请输入新学生id:");
int id=scanner.nextInt();
System.out.println("请输入新学生姓名:");
String name=scanner.nextLine();

还没等输入学生姓名,程序就自动结束了。

通过调试,可以看到,name实际读入了一个空字符串。

2.原因:

      在使用 nextInt() 方法之后立即使用 nextLine() 方法时,由于 nextInt() 方法会读取一个整数,但会在输入缓冲区中保留换行符,然后 nextLine() 方法会读取这个换行符,而不会等待用户输入。这会导致 nextLine() 方法直接读取到换行符,从而导致输入不正确。

三、解决方法

1.调换两个方法的顺序:先执行 nextLine() 再执行 nextInt()。

Scanner scanner =new Scanner(System.in);
System.out.println("请输入新学生姓名:");
String name=scanner.nextLine();
System.out.println("请输入新学生id:");
int id=scanner.nextInt();

2.在调用 nextInt() 之后调用 scanner.nextLine() 方法来清空输入缓冲区,然后再读取字符串。修改后的代码如下所示:

Scanner scanner =new Scanner(System.in);
System.out.println("请输入新学生id:");
int id=scanner.nextInt();
scanner.nextLine();//吸收掉输入缓存区里的回车,确保 nextLine() 方法读取到正确的用户输入。
System.out.println("请输入新学生姓名:");
String name=scanner.nextLine();

3.使用 nextLine() 读取所有输入,然后将其转换为所需的类型。这种方法避免了缓冲区问题,因为所有输入都是以字符串形式读取的。

Scanner scanner =new Scanner(System.in);
System.out.println("请输入新学生id:");
int id=Integer.parseInt(scanner.nextLine());//将其转换为所需的类型
System.out.println("请输入新学生姓名:");
String name=scanner.nextLine();
System.out.println(id+name);

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值