Java整数输入验证异常:二次输入后始终输出首次输入值
解决你的整数输入验证与计算问题
我明白你遇到的困扰了——不管你怎么修正第二个整数的输入,程序最后总是用第一次输入的那个值来执行计算。这是因为你的代码里存在几个关键的逻辑错误,咱们一步步拆解并修复:
问题1:错误的输入类型判断方法
你在第二个输入循环里用了in.hasNextBigInteger()来判断输入是否为整数,但你的变量i2是int类型,应该用in.hasNextInt()才对。hasNextBigInteger()是用来检测超出int范围的大整数的,这会导致普通int输入被误判为无效,直接进入错误分支。
问题2:多余的break语句导致循环提前终止
在第二个循环的if(in.hasNextBigInteger())分支里,不管i2是否大于i1,最后都有一个break语句。这就意味着哪怕用户输入的第二个整数比第一个小,循环也会直接终止,把那个不符合要求的i2保留下来,根本不会让用户重新输入正确的值。
问题3:无效的输入清除操作
当i2小于i1时,你调用了in.next(),但这时候in.nextInt()已经把那个整数读取到i2里了,in.next()会去读取下一个输入内容,反而会打乱后续的输入流程,完全没必要这么做。
修复后的完整代码
import java.util.Scanner; public class Comparing { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 输入第一个整数并验证 int i1; while(true){ System.out.print("Enter the first integer: "); if(in.hasNextInt()){ i1 = in.nextInt(); break; }else{ System.out.println("Invalid Integer! Please enter a valid integer."); in.next(); // 清除非整数的输入内容 } } // 输入第二个整数(必须大于第一个)并验证 int i2; while(true){ System.out.print("Enter a second larger integer: "); if(in.hasNextInt()){ i2 = in.nextInt(); if(i2 > i1){ break; // 符合条件,退出循环 }else{ System.out.println("Invalid input! The second integer must be larger than the first."); // 这里不需要in.next(),因为已经用nextInt()读取了输入 } }else{ System.out.println("Invalid Integer! Please enter a valid integer."); in.next(); // 清除非整数的输入内容 } } // 计算i1和i2之间的奇数和 int oddSum = 0; for(int num = i1; num <= i2; num++){ if(num % 2 != 0){ oddSum += num; } } System.out.println("The sum of odd integers between " + i1 + " and " + i2 + ": " + oddSum); in.close(); // 关闭Scanner资源,养成良好习惯 } }
关键修复点说明
- 把第二个循环的
hasNextBigInteger()替换为hasNextInt(),匹配int类型的输入判断逻辑。 - 移除了第二个循环里多余的
break语句,只有当i2确实大于i1时才退出循环,否则让用户重新输入。 - 优化了错误提示信息,让用户更清晰地知道输入不符合要求的原因。
- 去掉了
i2小于i1时多余的in.next()调用,避免输入流程混乱。 - 添加了
in.close()来关闭Scanner资源,符合Java的资源管理规范。 - 将变量名
oddsum改为oddSum,遵循Java驼峰命名规范,提升代码可读性。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

