简单的二十一点

时间:2013-09-06 03:54:01

标签: java eclipse

这是一个问题:给定2个大于0的int值,返回最接近21的值,而不是过去。如果它们都结束则返回0。

blackjack(19, 21) → 21
blackjack(21, 19) → 21
blackjack(19, 22) → 19

到目前为止我所拥有的:

 public int blackjack(int a, int b) {
  if (a>21 && b>21){
  return 0;
  }
  if (a<21 && b>21){
  return a;
  }
  if (b<21 && a>21){
  return b;
  }
  if (21-a < 21-b){
  return a;
  }
  return b;
}

这个问题来自codingbat.com,对于它显示的所有测试,这段代码都有效,但是当它完成并显示“其他测试”时,这段代码就失败了。我想在某种情况下这不会起作用,但我现在想不到它。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

public int blackjack(int a, int b) {
// if both a and b are outside the valid range
if (a > 21 && b > 21)
  return 0;

// if a is within the valid range but b is not
if (a <= 21 && b > 21)
  return a;

// if b is within the valid range but a is not
if (b <= 21 && a > 21)
  return b;

// if both a and be are within the valid range
return (a-b >= 0) ? a : b;

// Alternative: return Math.max(a, b);    ---as per SimonT in the comment
}

所以我猜你的问题是你没有在你的条件中加入21。

答案 1 :(得分:1)

如果a = 21,b = 22,那么它将返回不正确的b。

答案 2 :(得分:1)

您忘记在条件中指定=操作。将第二和第三个条件更改为:

if (a<=21 && b>21){
  return a;
}
if (b<=21 && a>21){
  return b;
}