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

Hyperskill Java策略模式问题求助:Min-Max实现异常排查

解决策略模式实现中的逻辑错误

嘿,我看到你在Hyperskill的Java策略模式章节卡壳了,咱们来一步步揪出代码里的问题,让它正常工作起来~

核心问题:两个策略类的逻辑完全搞反了,还有判断条件错误

先看你的MaxFindingStrategy和MinFindingStrategy,里面的排序后取值逻辑和数组长度判断都有问题:

1. MaxFindingStrategy的错误

  • Arrays.sort(numbers)默认是升序排序,排序后最大的元素应该在数组的最后一位(numbers[numbers.length-1]),但你现在返回的是numbers[0](这是最小的元素),完全搞反了。
  • 数组非空的判断条件numbers.length > 0是对的,但取值逻辑错了。

2. MinFindingStrategy的错误

  • 判断条件写成了numbers.length > 1,这意味着当数组长度为1时,会错误地进入else分支返回Integer.MAX_VALUE,但实际上长度为1的数组应该返回那个唯一的元素才对,应该改成numbers.length > 0。
  • 同样,升序排序后最小的元素在数组第一位(numbers[0]),但你现在返回的是numbers[numbers.length-1](最大的元素),也搞反了。

修正后的代码

把你的两个策略类替换成下面的实现:

class MaxFindingStrategy implements FindingStrategy {
    @Override
    public int getResult(int[] numbers) {
        if (numbers.length > 0 ){
            Arrays.sort(numbers);
            return numbers[numbers.length-1]; // 取最后一位(最大的元素)
        } else {
            return Integer.MIN_VALUE;
        }
    }
}
class MinFindingStrategy implements FindingStrategy {
    @Override
    public int getResult(int[] numbers) {
        if (numbers.length > 0 ){ // 改成判断长度大于0,覆盖长度为1的情况
            Arrays.sort(numbers);
            return numbers[0]; // 取第一位(最小的元素)
        } else {
            return Integer.MAX_VALUE;
        }
    }
}

验证一下题目要求

题目里说的“如果数组为空,查找最小值时返回Integer.MAX_VALUE,查找最大值时返回Integer.MIN_VALUE”,你原来的这部分逻辑是对的,修正后就可以正常触发了:

  • 当输入EMPTY并选择MIN时,会返回Integer.MAX_VALUE(2147483647)
  • 当输入EMPTY并选择MAX时,会返回Integer.MIN_VALUE(-2147483648)

非空数组的情况也能正常工作了,比如输入3 1 4选MIN会返回1,选MAX会返回4。

内容的提问来源于stack exchange,提问作者Andrey Tutubalin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:02:46