2

質問は次のとおりです。0 より大きい 2 つの 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からのもので、表示されるすべてのテストでこのコードは機能しますが、終了して「他のテスト」を表示すると、このコードは失敗します。これがうまくいかない特定の状況があると思いますが、今は思いつきません。何かご意見は?

4

3 に答える 3

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 を含めなかったことだと思います。

于 2013-09-06T04:00:28.150 に答える
1

a=21、b=22 の場合、正しくない b が返されます。

于 2013-09-06T04:00:07.487 に答える
1

=条件で操作を指定するのを忘れました。2 番目と 3 番目の条件を次のように変更します。

if (a<=21 && b>21){
  return a;
}
if (b<=21 && a>21){
  return b;
}
于 2013-09-06T04:03:24.567 に答える