Java Scanner验证的while循环出现输入校验失败问题
解决Scanner整数范围校验的输入验证问题
嘿,我一眼就看出你这段代码里的问题所在啦!咱们来拆解一下:
你的第二个while循环里连续调用了三次filmScanner.nextInt()——每次调用这个方法都会从输入流里读取一个新的整数,这直接导致了验证逻辑混乱:
比如你输入了一个不符合范围的数(比如6),第一次
nextInt()读走了6,判断出它不在1-5之间;紧接着循环里又调用nextInt(),这时候程序会卡住等着用户再输入一个数,而不是重新校验刚才的那个6,这肯定会出现输入验证失败的问题。
修正后的代码
public void promptFilmRating() { // 第一步:确保输入是整数 while (!filmScanner.hasNextInt()) { System.out.println("Please enter a number instead of text."); filmScanner.next(); // 清除无效的非整数输入 } int inputRating = filmScanner.nextInt(); // 把合法整数暂存到变量里 // 第二步:校验范围,不符合则重新输入 while (inputRating > 5 || inputRating < 1) { System.out.println("Your number is outside of the rating boundaries, enter a number between 1 and 5."); // 再次校验输入是否为整数(防止用户输入错误范围后又输入文本) while (!filmScanner.hasNextInt()) { System.out.println("Please enter a number instead of text."); filmScanner.next(); } inputRating = filmScanner.nextInt(); // 更新暂存变量为新的合法整数 } filmRatingOutOfFive = inputRating; // 最后把符合要求的值赋值给成员变量 }
关键修正点
- 用
inputRating变量暂存读取到的整数,避免重复调用nextInt()消耗输入流里的内容 - 在范围校验的循环内,再次加入非整数的校验逻辑,覆盖用户可能的各种错误输入场景
- 只有当输入完全符合要求(是整数且在1-5之间)时,才将值赋值给
filmRatingOutOfFive
内容的提问来源于stack exchange,提问作者marrimred99
相关产品推荐
相关产品推荐

