Java循环填充多维数组时首条用户输入被跳过的问题及修复
解决Scanner循环中首次输入被跳过的问题
兄弟,你遇到的这个问题其实是Java Scanner的经典小坑!我给你唠明白咋回事:
当你用input.nextInt()读取批次数量和学生数量时,用户输入数字后会按下回车,这个回车产生的换行符\n并没有被nextInt()读取,而是留在了输入缓冲区里。接下来第一次执行list[j][i] = input.nextLine();的时候,nextLine()会直接把这个残留的换行符读进来,相当于得到了一个空字符串,所以看起来就像是跳过了第一次输入。
给你两种简单的解决办法:
方法一:清空残留的换行符
在每次调用nextInt()之后,额外调用一次input.nextLine()把缓冲区里的换行符“吃掉”,这样后续的nextLine()就能正常读取用户输入的内容了。修改后的代码如下:
import java.util.Scanner; public class MyClass { public static void main(String args[]) { Scanner input = new Scanner(System.in); System.out.print("number of batches: "); int a = input.nextInt(); input.nextLine(); // 清空换行符 System.out.print("number of students: "); int b = input.nextInt(); input.nextLine(); // 清空换行符 String[][] list = new String[a][b]; String name; for (int j = 0; j < a; j++) { for (int i = 0; i < b; i++) { System.out.print("enter a student: "); list[j][i] = input.nextLine(); } } } }
方法二:全程使用nextLine()读取输入
另一种思路是统一用nextLine()读取所有输入,然后把读取到的字符串转换成整数,从根源上避免换行符残留的问题。代码示例:
import java.util.Scanner; public class MyClass { public static void main(String args[]) { Scanner input = new Scanner(System.in); System.out.print("number of batches: "); int a = Integer.parseInt(input.nextLine()); // 读取字符串转整数 System.out.print("number of students: "); int b = Integer.parseInt(input.nextLine()); String[][] list = new String[a][b]; String name; for (int j = 0; j < a; j++) { for (int i = 0; i < b; i++) { System.out.print("enter a student: "); list[j][i] = input.nextLine(); } } } }
两种方法都能解决你的问题,选哪种看你习惯啦!
内容的提问来源于stack exchange,提问作者yol torres newbie
相关产品推荐
相关产品推荐

