我正在编写以下来自codingbat的问题:
给定2个大于0的int值,返回最接近的值 到21岁而不去。如果它们都结束则返回0。
二十一点(19,21)→21
二十一点(21,19)→21
二十一点(19,22)→19
我的解决方案是:
public int blackjack(int a, int b) {
if (a>21){
if (b>21){
return 0;
}
return b;
}
else if(b>21) return a;
return Math.max(a,b);
}
我的逻辑中是否有某些东西可以改进以提高效率?我做了不必要的事吗?
答案 0 :(得分:4)
这可以更有效率。至少它是另一种看待问题的方式:
public int blackjack(int a, int b) {
if (a>21) a = 0;
if (b>21) b = 0;
if (a>b) {
return a;
else {
return b;
}
}
答案 1 :(得分:2)
我不会说这更有效率,但我重新订购了一些if语句并得到了下面的代码。我认为这至少更容易理解:
public int blackjack(int a, int b) {
if (a <= 21 && b <= 21) return Math.max(a, b);
if (a <= 21) return a;
if (b <= 21) return b;
return 0;
}
答案 2 :(得分:2)
这可能非常接近;
public int blackjack(int a, int b) {
if(a > 21 && b > 21) return 0;
else if (a <= 21 && a > b || b > 21) return a;
return b;
}
答案 3 :(得分:1)
使用三元运算符:
public int blackjack(int a, int b) {
a = a > 21 ? 0 : a;
b = b > 21 ? 0 : b;
return (a > b) ? a : b;
}