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
相关产品推荐
相关产品推荐

