Java Scanner输入异常:输入年龄后地址字段被跳过的问题求助
Java Scanner输入异常:输入年龄后地址字段被跳过的问题求助
嗨,我能理解你遇到的困扰!这个问题其实是Scanner类的一个常见小坑,我来给你拆解一下原因和解决办法:
问题原因
当你使用scanner.nextInt()读取年龄的时候,它只会读取输入的数字部分,不会处理数字后面的换行符。这个换行符会留在输入缓冲区里,接下来调用scanner.nextLine()读取地址时,它会直接把这个残留的换行符当成空输入,所以看起来就像是地址字段被跳过了。
解决办法
有两种简单的方式可以解决这个问题:
方法一:在nextInt()之后额外调用一次nextLine()来吃掉残留的换行符
修改你的代码,在读取年龄后加一行scanner.nextLine();,把缓冲区里的换行符清空,这样后面的nextLine()就能正常读取地址了:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter your name: "); String name = scanner.nextLine(); System.out.print("Enter your surname: "); String surname = scanner.nextLine(); System.out.println("Enter your age: "); int age = scanner.nextInt(); // 新增这一行,清除残留的换行符 scanner.nextLine(); System.out.println("Enter your address: "); String address = scanner.nextLine(); System.out.println("Your name is " + name + " " + surname); // 可以顺便把年龄和地址也打印出来验证 System.out.println("Your age is " + age); System.out.println("Your address is " + address); } }
方法二:统一用nextLine()读取所有输入,再把年龄的字符串转成整数
这种方式可以避免换行符的问题,因为所有输入都用nextLine()处理,然后通过Integer.parseInt()把年龄的字符串转换成int类型:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter your name: "); String name = scanner.nextLine(); System.out.print("Enter your surname: "); String surname = scanner.nextLine(); System.out.println("Enter your age: "); // 先用nextLine()读取年龄字符串,再转成int int age = Integer.parseInt(scanner.nextLine()); System.out.println("Enter your address: "); String address = scanner.nextLine(); System.out.println("Your name is " + name + " " + surname); System.out.println("Your age is " + age); System.out.println("Your address is " + address); } }
两种方法都能解决你的问题,你可以根据自己的习惯选择其中一种~
备注:内容来源于stack exchange,提问作者user22418834
相关产品推荐
相关产品推荐

