You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

面向对象编程:评分方法失效及移除分数超限判断后异常原因咨询

问题:移除分数上限判断后,输入>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"); 
        } 
    } 
}

问题根源分析

其实你遇到的情况,核心是原来的代码逻辑本身就有错误,移除那个无效的判断后,只是暴露了原本就存在的逻辑漏洞:

  1. 原来的points > 100判断永远不会执行:
    这个判断被嵌套在else分支里,而else分支的触发条件是points <= 0(也就是分数为负数或0)。在这种情况下,points > 100是完全不可能成立的——总不可能一个数既小于等于0又大于100吧?所以这个提示原本就从来没被触发过,只是你之前没注意到而已。

  2. 移除判断后的行为解释:

    • 当输入大于100的分数时,满足points > 0的条件,会直接进入第一个分支执行加分操作,根本不会走到else分支,所以自然没有任何提示。
    • 当输入-100这类负数时,会触发else分支,执行里面的System.out.println("Enter positive grading point");,所以看起来功能正常。

正确的逻辑修复方案

如果你的需求是:

  • 负数:提示输入正数
  • 大于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:21:37