Java中for循环结合Scanner输入时跳过输入问题求助
解决Java循环中跳过姓名输入的问题
嘿,我一眼就看出问题出在哪了——nextInt()方法不会读取输入结束后的换行符!
你第一次循环输入年龄后按下回车,这个换行符会留在输入缓冲区里。第二次循环执行input.nextLine()读取姓名时,它直接把这个残留的换行符当成了输入内容,所以看起来像是跳过了姓名输入,直接进入性别环节。
给你两个简单的解决方案:
方案1:在nextInt()后额外调用一次nextLine()吃掉换行符
修改你的循环代码,每次读取完年龄后,加一行input.nextLine()来清除缓冲区里的换行:
class MID { public static void main(String args[]) { person [] persons= new person[3]; Scanner input= new Scanner(System.in); for (int i = 0; i <=2 ; i++) { persons[i]= new person(); System.out.println(" Please enter the name of person " + (i+1)); persons[i].P_name = input.nextLine(); System.out.println(" sex of person" + (i+1)); persons [i].P_sex= input.nextLine(); System.out.println(" age of person" + (i+1)); persons[i].P_age =input.nextInt(); // 新增这行,吃掉nextInt()留下的换行符 input.nextLine(); } // 调用P_data()方法输出测试 for(person p : persons) { p.P_data(); } } }
方案2:统一用nextLine()读取所有输入,再把年龄字符串转为int
这种方法可以完全避免缓冲区残留问题,输入处理更统一:
class MID { public static void main(String args[]) { person [] persons= new person[3]; Scanner input= new Scanner(System.in); for (int i = 0; i <=2 ; i++) { persons[i]= new person(); System.out.println(" Please enter the name of person " + (i+1)); persons[i].P_name = input.nextLine(); System.out.println(" sex of person" + (i+1)); persons [i].P_sex= input.nextLine(); System.out.println(" age of person" + (i+1)); // 先读取年龄字符串,再转为int类型 String ageStr = input.nextLine(); persons[i].P_age = Integer.parseInt(ageStr); } // 调用P_data()方法输出测试 for(person p : persons) { p.P_data(); } } }
另外提个小建议:Java的类名规范是首字母大写,所以person类建议改成Person,成员变量名也尽量用小驼峰命名法(比如pName代替P_name),这样代码更符合行业规范哦~
内容的提问来源于stack exchange,提问作者Bereket
相关产品推荐
相关产品推荐

