面向对象编程:评分方法失效及移除分数超限判断后异常原因咨询
问题:移除分数上限判断后,输入>100的分数无提示,但输入负数功能正常?
我原本的代码里有判断分数大于100时输出提示的逻辑,移除这个if语句后,输入大于100的分数时没有对应的提示,但输入-100这类负数时功能正常,想知道这是为什么?
原代码(移除if(points > 100)之前):
public class nameofclass { private int grade; public void enterGrade(int points) { if(points > 0) { grade = grade + points; } else { if(points > 100) { System.out.println("Enter a lower grading point"); } System.out.println("Enter positive grading point"); } } }
问题根源分析
其实你遇到的情况,核心是原来的代码逻辑本身就有错误,移除那个无效的判断后,只是暴露了原本就存在的逻辑漏洞:
原来的
points > 100判断永远不会执行:
这个判断被嵌套在else分支里,而else分支的触发条件是points <= 0(也就是分数为负数或0)。在这种情况下,points > 100是完全不可能成立的——总不可能一个数既小于等于0又大于100吧?所以这个提示原本就从来没被触发过,只是你之前没注意到而已。移除判断后的行为解释:
- 当输入大于100的分数时,满足
points > 0的条件,会直接进入第一个分支执行加分操作,根本不会走到else分支,所以自然没有任何提示。 - 当输入-100这类负数时,会触发
else分支,执行里面的System.out.println("Enter positive grading point");,所以看起来功能正常。
- 当输入大于100的分数时,满足
正确的逻辑修复方案
如果你的需求是:
- 负数:提示输入正数
- 大于100:提示输入更低的分数
- 0-100之间:正常加分
那应该把分数上限的判断移到正确的分支里,或者重构逻辑让每个条件清晰独立,比如:
public class nameofclass { private int grade; public void enterGrade(int points) { // 先处理负数情况 if(points < 0) { System.out.println("Enter positive grading point"); } // 再处理超分情况 else if(points > 100) { System.out.println("Enter a lower grading point"); } // 最后处理正常加分 else { grade = grade + points; } } }
这样每个条件分支互不重叠,逻辑清晰,所有边界情况都能被正确处理。
内容的提问来源于stack exchange,提问作者Mahmoud Alkhader
相关产品推荐
相关产品推荐

