Java中使用Scanner获取数字后读取字符串列表的问题咨询
问题分析与解决方案
首先得搞清楚你遇到的问题根源:当你用input.nextInt()读取数字时,它只会读取输入的数字部分,而用户按下的**回车键(换行符)**会留在Scanner的输入缓冲区里。接下来调用input.nextLine()时,它会直接读取这个残留的换行符,导致nameList被赋值为空字符串,程序就直接跳到了读取lastName的步骤,完全没给你输入名字列表的机会。
那第一个输入改用nextLine()获取字符串是否可行?当然可以,但你需要把读取到的字符串转换成整数,同时要处理输入不是有效数字的情况。
下面给你两种可行的解决方案:
方案一:用nextLine()读取数字并转换
这种方式可以避免换行符残留的问题,不过要捕获可能的格式异常:
public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter a number:"); // 先用nextLine()读取整行输入,再转成int int num = 0; try { String numStr = input.nextLine(); num = Integer.parseInt(numStr); } catch (NumberFormatException e) { System.out.println("请输入有效的整数!"); input.close(); return; } System.out.println("Enter a name list:"); String nameList = input.nextLine(); System.out.println("Enter last name:"); String lastName = input.nextLine(); // 测试输出 System.out.println("数字:" + num); System.out.println("名字列表:" + nameList); System.out.println("姓氏:" + lastName); input.close(); }
方案二:在nextInt()之后额外调用一次nextLine()吃掉换行符
如果你还是想用nextInt()读取数字,只需要在它之后加一行input.nextLine()来消耗掉残留的换行符,这样后续的nextLine()就能正常读取用户输入了:
public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter a number:"); int num = input.nextInt(); // 吃掉nextInt()留下的换行符 input.nextLine(); System.out.println("Enter a name list:"); String nameList = input.nextLine(); System.out.println("Enter last name:"); String lastName = input.nextLine(); // 测试输出 System.out.println("数字:" + num); System.out.println("名字列表:" + nameList); System.out.println("姓氏:" + lastName); input.close(); }
两种方案都能解决你的问题,你可以根据自己的需求选择:如果想统一用nextLine()处理所有输入,选方案一;如果更习惯用nextInt()读数字,选方案二更简单。
内容的提问来源于stack exchange,提问作者Stéphane GRILLON
相关产品推荐
相关产品推荐

