【发布时间】:2015-10-29 22:32:33
【问题描述】:
我一直在处理这些 CodingBat 问题,但遇到了另一个问题。
任务是这样的:
给定 2 个正 int 值,返回 10..20 范围内的较大值,如果两者都不在该范围内,则返回 0。
一些例子:
- max1020(11, 19) → 19
- max1020(19, 11) → 19
- max1020(11, 9) → 11
我的解决办法是:
public int max1020(int a, int b) {
if (((a >= 10 && a <= 20) || (b >= 10 && b <= 20)) && a >= b) {
return a;
}
if (((a >= 10 && a <= 20) || (b >= 10 && b <= 20)) && b >= a) {
return b;
} else {
return 0;
}
}
代码在超过一半的时间内返回了正确的输出,但在某些情况下它没有按预期工作。场景是输入为 (10,21),(21,10),(23,10) 时。
这很奇怪,因为我明确排除了 #>20,但对于上述三种情况,它分别返回 21、21 和 23。
我在哪里做错了?
【问题讨论】:
-
试着把你的比较器写成
(10=<a && a<=20),这样更容易阅读和发现错误。 -
检查范围后,您会查找两个数字中的最大值,例如 21,19 19 在范围内但 21 不在范围内,您的 if 条件通过但您返回两个数字的最大值,即21.请注意21不在范围内。
-
不知道你写到这里有没有漏掉,但是第二个
if之前应该有一个else。还有其他问题,但您应该先解决这个问题。
标签: java