调试时而正常时而失效的Boolean循环语句问题
Java布尔变量循环逻辑错误修正
你的代码核心问题是每次循环都会无条件重置allValid的值:如果前面出现无效数将allValid设为false,后续遇到有效数时又会把它改回true,导致只要最后一个输入有效,结果就会错误判定为“全部有效”。
修正思路
初始将allValid设为true,仅当遇到不符合1-10范围的数时,才将allValid设为false,且不再改回true——因为只要存在一个无效数,最终结果就必然是false,后续输入不影响结论。还可以添加break语句优化,发现无效数后直接跳出循环,避免不必要的输入读取。
修正后的代码
替换你编写的部分:
boolean allValid = true; int newInput; int i; numInts = scnr.nextInt(); for(i=0; i<numInts; ++i) { newInput = scnr.nextInt(); // 检测当前数是否超出1-10范围 if (newInput <= 0 || newInput >= 11) { allValid = false; // 可选优化:找到第一个无效数后直接终止循环 // break; } }
逻辑说明
- 初始
allValid为true,默认假设所有数都有效; - 每读取一个数,仅在它不符合范围时才将
allValid设为false; - 一旦
allValid变为false,后续循环不会再修改它,确保结果正确; - 若添加
break,在发现第一个无效数后立即停止循环,减少不必要的IO操作。
测试案例验证:输入6, 2, 12, 4, 9, 5时,读取到12后allValid变为false,最终输出“Has non-matching value(s)”,符合题目要求。
内容的提问来源于stack exchange,提问作者Nicole Haight
相关产品推荐
相关产品推荐

