当然Varun的回答是正确的。另外,我想详细说明一些意见,并展示解决问题的另一种方法,该方法更简单,不太可能包含错误。
在阅读问题的陈述,你可能会注意到,该方法返回一个值,如果满足一定条件,或返回0
其他。因此,您可以使用默认值0
初始化结果,如果条件满足,则更改结果,然后返回结果。这将减少代码:
public int max1020(int a, int b) {
int result = 0;
if (a >= 10 && a <= 20) result = a;
if (b >= 10 && b <= 20 && b > result) result = b;
return result;
}
不能让它更简单,我想。 (但是,如果可以的话,请评论,我爱KISS!:))
该解决方案产生略有不同的结果,如果两个a
和b
在范围和a=b
,它将返回a
。如果这种情况发生,问题陈述并不是很清楚,Varun的回答也表明了这一点。巧合(或不)Codingbat不检查这种情况。在这种情况下,网站上提出的解决方案也会返回a
。
如果你认为它应该返回0
时a=b
,它很容易调整,
public int max1020(int a, int b) {
int result = 0;
if (a != b) {
if (a >= 10 && a <= 20) result = a;
if (b >= 10 && b <= 20 && b > result) result = b;
}
return result;
}
还是蛮简单的:)
为了解释TJCrowder的约压痕评论:如果你把身体的if
声明在下一行,你应该使用大括号和缩进行。否则,很容易误读它,或者在更改代码时出错。
// this can be error prone and harder to read,
// especially if you have multiple if statements,
// or add a statement to the body of the if statement in the future
// (shouldn't do this)
if (condition)
statement;
// Personally I think this is totally fine for a simple statement.
// But I know not everybody will agree
if (condition) statement;
// Usually, you'll see this formatting.
// Even without reading anything, the formatting makes it instantly clear
// which statements belong to the body of the if
if (condition) {
statement;
}
边注:在代码中else
声明属于只最后if
。你的格式可以通过在这些之间不加空格来表示清楚,例如
if (condition) statement;
else statement;
if (condition) {
statement;
} else {
statement;
}
在代码中else
声明实际上是过时的,你可以简单地return 0;
在最后一行。
Varun建议您可以使用else if
s是正确的。理论上,如果第一个if
声明的条件为真,则使用else if
将使代码跳过其他if
的测试,并且效率更高一些。此外,它会显示只有在前面的if
语句错误时才会达到后续的if
语句。
然而,实际上,在你的代码中,它并不重要,因为如果条件为true
,并且后续的if
语句永远无法到达,则该方法将完成并返回一个值。
对不起,它的Java! –
为什么不简化代码,只需检查'a'是否在第一个范围内?与'b'同上然后找到最大的 –
'&&'与'||'具有相同的优先级,因此您的if子句从左到右读取。你需要围绕“内部”子句使用括号。 – Evert