2013-09-06 2 views
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에서, 그리고이 코드가 작동하지만이에 "다른 검사 완료 때 보여줍니다 모든 테스트입니다 ",이 코드는 실패합니다. 이것이 작동하지 않는 특정 상황이 있다고 생각하지만 지금은 생각할 수 없습니다. 이견있는 사람?

+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

마지막 줄에는'return Math.max (a, b); 또는'반환 (a> b)? a : b;' – SimonT

+0

웹 사이트의 코드이고 라이브러리를 사용할 수 있는지 확실하지 않아서 내가 똑바로 논리를 따라 갔다. – user1549672

+0

알았어. – user1549672

1

a = 21, b = 22 인 경우 올바르지 않은 b가 반환됩니다.

1

귀하의 조건에서 = 작업을 지정하는 것을 잊었습니다. 두 번째 및 세 번째 조건을 다음과 같이 변경하십시오.

if (a<=21 && b>21){ 
    return a; 
} 
if (b<=21 && a>21){ 
    return b; 
} 
관련 문제