Java中And/Or逻辑困惑:循环终止条件问题咨询
搞懂循环条件的逻辑:为什么你的while条件不对?
首先得把程序结束的条件和循环继续的条件掰明白——这是很多新手容易踩的坑!
题目要求:当偶数和≥50 或 奇数和≥49时,程序结束。那反过来想:程序要继续跑循环的前提是什么?就是还没触发任何一个结束条件,也就是:
偶数和 < 50 并且 奇数和 < 49
为什么是“并且”?因为只要其中一个满足结束条件(比如偶数和已经到50了),不管另一个数值如何,程序都得停。只有两个都没达到阈值的时候,才需要继续循环。
那你的条件while (sumeven < 50 || sumodd < 49)错在哪?举个实际场景就懂了:
- 假设偶数和已经是60(≥50,早就该结束了),但奇数和是40(<49)
- 此时
sumeven <50是false,sumodd <49是true,||逻辑只要有一个为true就整体为true,循环会继续跑——这完全违背了题目要求!
再看参考答案的while (evensum <= 50 && oddsum <=49),核心逻辑是对的:用&&把两个“未达结束阈值”的条件绑定在一起,只要其中一个达标(比如偶数和到51,或者奇数和到49),循环就会停止,完美匹配题目“任一条件满足就结束”的要求。这里的<=可能是题目样例里默认“等于阈值时也触发结束”,本质和咱们推导的<逻辑一致,只是阈值边界的细节差异。
最后给你划个重点:
- 如果结束条件是「A或B」,那循环继续的条件就是「非A且非B」(这是逻辑里的德摩根定律,记下来准没错)
- 别把“结束条件”直接套进while里,while要的是“继续循环的条件”!
内容的提问来源于stack exchange,提问作者Ali Zgheib
相关产品推荐
相关产品推荐

