二十一点更有效的解决方案?

时间:2011-08-12 04:17:10

标签: java

我正在编写以下来自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);
}

我的逻辑中是否有某些东西可以改进以提高效率?我做了不必要的事吗?

4 个答案:

答案 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;
}