2013-09-06 7 views
2

Возникает вопрос: учитывая 2 значения int больше 0, верните любое значение, ближайшее к 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, и для всех тестов, которые он показывает, этот код работает, но когда он заканчивает и отображает «другие тесты ", этот код не работает. Я полагаю, что есть определенная ситуация, когда это не сработает, но я не могу думать об этом прямо сейчас. Есть предположения?

+1

Если a 18 и b - 19, то что возвращает ваша программа и почему? Не является ли число, самое близкое к 21 в нижней части наибольшего числа? – dcaswell

+1

Вам не хватает случаев, когда хотя бы один из них ровно 21. –

ответ

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

Для последней строки, почему бы не вернуть Math.max (a, b); '? Или 'return (a> b)? a: b; ' – SimonT

+0

Это код на веб-сайте, и я не был уверен, можно ли использовать библиотеки, поэтому я пошел с прямой логикой :) – user1549672

+0

Хорошо, я только что проверил и это тоже работает! – user1549672

1

Если a = 21, b = 22, то оно вернет b, что неверно.

1

Вы забыли указать операцию = в вашем состоянии. Изменение 2-го и 3-го состояний до:

if (a<=21 && b>21){ 
    return a; 
} 
if (b<=21 && a>21){ 
    return b; 
} 
Смежные вопросы