我正在尝试在codingbat上解决这个问题,问题是给定2个正的int值,返回10..20(含)范围内的较大值,如果两个都不在该范围内,则返回0。下面给出了解决方案,但是我无法理解第一部分,因为评论说较大的值是a,但代码说(b> a)这是什么意思:int temp = a; a = b; b = temp;。任何人都可以解释一下......
public int max1020(int a, int b) {
// First make it so the bigger value is in a
if (b > a) {
int temp = a;
a = b;
b = temp;
}
// Knowing a is bigger, just check a first
if (a >= 10 && a <= 20) return a;
if (b >= 10 && b <= 20) return b;
return 0;
}
答案 0 :(得分:2)
第一个if语句确保a
不小于b
(如果a
小于b
,则交换a
和{{ 1}} - 那是涉及b
变量的3个赋值语句的内容。
第二个if语句返回temp
,如果它在所需范围内(此时我们知道a
)。
如果没有,第三个if语句会返回a >= b
,如果它在所需范围内。
否则返回0(当b
和a
都不在要求范围内时)。
答案 1 :(得分:0)
它表示如果b
的值大于a
的值,请切换2个值。因此,例如,如果a = 10
和b = 15
:
if (b > a) {
是真的,所以会进入if
int temp = a;
temp将取值10
a = b;
a将取值15
b = temp;
b将取值10
因此,如果a
的值大于b
的值,则会切换b
和a
的值。因此,a
将具有更大的价值。