2016-09-29 3 views
0

그래서이 미니 프로젝트를 가지고 있습니다. 기본적으로 자바에서 문자열이 플러시인지 확인하는 간단한 방법입니다. 나는 자바의 초심자이며 (카드 게임/포커 ...) 나는이 모든 것을 처음 접한다. , 하트 3 개, 하트 7 개, 하트 8 개, 스페이드 2 개. 순위는 문자열의 1, 3, 5, 7, 9 번째 색인에 있습니다. 문자열은 플러시를 위해 같은 순위의 5 개가 있어야합니다.루프의 여러 조건을 사용하여 문자열의 다른 인덱스를 비교하려면 어떻게합니까?

public class CardProblemss { 

String hand = "Kh3h7h8h2h"; 

public boolean hasFlush(String hand) { 
    String suit1 = Character.toString(hand.charAt(1)); 
    String suit2 = Character.toString(hand.charAt(3)); 
    String suit3 = Character.toString(hand.charAt(5)); 
    String suit4 = Character.toString(hand.charAt(7)); 
    String suit5 = Character.toString(hand.charAt(9)); 
    int flushcounter = 0; 

    while (true) { 
    if (suit1.equals(suit2)) { 
     flushcounter++; 
    }    
    else if (suit2.equals(suit3)) { 
     flushcounter++; 
    } 
    else if (suit3.equals(suit4)) { 
     flushcounter++; 
    } 
    else if (suit4.equals(suit5)) { 
     flushcounter++; 
    } 
    System.out.println(flushcounter); 
    if (flushcounter >= 5) { 
     return true; 
    } 
    else { 
     return false; 
    } 
    } 

} 

이제 코드가 bleh라고 말할 수 있습니다. 하지만 내 질문은 기본적으로 자체 charAt (인덱스) 메서드를 사용하는 루프를 공식화 할 수 있습니다? 손의 순위가 인덱스 1,3,5,7,9에 있기 때문에 매번 실행될 때마다이 메소드의 인덱스를 2 씩 증가시키는 루프를 작성할 수 있습니까? 아니면 제가 할 수있는 더 효율적인 방법이 있습니까? 감사합니다.

+1

예, 유 캔 ... '에 대해 (나는()을 sidgate

답변

1

이 작품이 마음에 드시나요?

int flushCounter = 0; 

char s = hand.charAt(1); // s for suite 
for (int i = 3; i < hand.length(); i = i + 2) { 
    if (s == hand.charAt(i)) { 
    flushCounter++; 
    } 
} 

if (flushCounter >= 5) { 
    return true; 
} else { 
    return false; 
} 

이렇게하면 문자열을 반복하고 이상한 값으로 변환하는 유일한 방법은 스위트를 비교하는 것입니다. 나는 당신이 손 크기가 항상 3 이상이 될 것이라고 가정하고 있습니다. i을 1에서 시작하려면 그 작업을 수행 할 수도 있습니다.

int flushCounter = 0; 
char s; // s for suite 

for (int i = 1; i < hand.length(); i = i + 2) { 
    if (i == 1) { 
    s = hand.charAt(1); 
    } else if (s == hand.charAt(i)) { 
    flushCounter++; 
    } 
} 

if (flushCounter >= 5) { 
    return true; 
} else { 
    return false; 
} 

if 문 안에서 s를 초기화하지 않도록주의해야합니다. 그렇지 않으면 사용하기 전에 범위를 벗어납니다.

는 참고 :이 표현식을 평가 한 후 그 결과를 반환으로

if (flushCounter >= 5) { 
    return true; 
} else { 
    return false; 
} 

return flushCounter >= 5; 

로 감소 될 수있다. 이전 방법은 훨씬 더 장황하다. 당신이 단순히 표현의 가치를 되돌리고 있기 때문에 나는 후자가 더 간단하다고 주장 할 것이다.

+0

하거나 리턴 flushCounter == 5'! – flakes

+0

그건 내 취향이지만 OP는 초보자라는 말로 OP 내용이 길어질수록 더 낫다고 생각했다. – Nefari0uss

+0

이 경우 false를 반환하는 것을 잊지 마십시오! : P – flakes

0

재미있게하기 위해 스트림을 사용하여이 작업을 수행 할 수 있습니다.

public static boolean hasFlush(final String hand) { 
    final char first = hand.charAt(1); 
    final long count = hand.chars().filter(c -> c == first).count(); 
    return count == 5; 
} 
관련 문제