2014-02-11 5 views
0

카드 갑판을 만들려고하고 있는데 카드 번호와 정장을 지정할 수있는 52 개의 인스턴스를 만듭니다. 예를 들어, Card (2, "Clubs")는 2의 가치를 가진 카드와 Suits Club을 인스턴스화합니다.루프를 사용하여 인스턴스 집합 만들기

다음 코드를 사용하여 프로세스를 반복하고 52 번 입력하는 대신 배열에 저장합니다. 그것은 효과가 있지만 더 잘할 수 있는지 알아 내려고 노력하고 있습니다. 너무 많은 if/else 코딩으로 인해 다소 나 빠졌습니다. 열거 형에 양복을 저장하려고 시도했지만 전화를 할 수 없습니다. String과 일치하지 않는 것 같습니다.

또한이 방법을 사용하면 I/P, Jack, Queen, King, Ace에 올 때 더 많은 if/else로 끝날 것입니다. 더 나은 접근 방법이 있다면 조언을 구하십시오. 감사.

Card[] cards = new Card[52]; 

int i = 0; 
for(int x=0; x < 4; x++){ 
     for(int y=2; y < 15; y++){ 
      if(x == 0){ 
       cards[i] = new Card(y, "CLUBS"); 
      } 
      else if(x == 1){ 
       cards[i] = new Card(y, "DIAMONDS"); 
      } 
      else if(x == 2){ 
       cards[i] = new Card(y, "HEARTS"); 
      } 
      else{ 
       cards[i] = new Card(y, "SPADES"); 
      } 
      i++; 
     } 
} 

답변

3

를 사용하여 소송에 대한 List :

또한 열거에서 정장을 정의 고려할 수
List<String> suits = new ArrayList<String>(); 
suits.add("CLUBS"); 
suits.add("DIAMONDS"); 
suits.add("HEARTS"); 
suits.add("SPADES"); 

Card[] cards = new Card[52]; 
int i = 0; 
for (String suit : suits) { 
    for (int y = 2; y < 15; y++) { 
     cards[i] = new Card(y, suit); 
     i++; 
    } 
} 

:

for (Suit suit : Suit.values()) { 
    for (int y = 2; y < 15; y++) { 
     cards[i] = new Card(y, suit.name()); 
     i++; 
    } 
} 
: 루프가 변경됩니다이 경우

public enum Suit { 
    CLUBS, DIAMONDS, HEARTS, SPADES; 
} 

1

유형 색인을 유형 문자열로 매핑하는 java.util.Map<Integer, String>을 사용해보십시오.

final Map<Integer, String> types = new HashMap<Integer, String>(); 
types.put(0, "CLUBS"); 
types.put(1, "DIAMONDS"); 
// ... 

int i = 0; 
for(int x=0; x < 4; x++){ 
    for(int y=2; y < 15; y++){ 
     cards[i] = new Card(y, types.get(x)); 
     i++; 
    } 
} 
0

당신은 항상 다음과 같이 뭔가 소송을 설정할 수 있습니다,

for(int x=0; x < 4; x++) { 
    // Perhaps getSuit(x)? 
    String suit = "CLUBS"; 
    if (x == 1) suit = "DIAMONDS"; 
    else if (x == 2) suit = "HEARTS"; 
    else if (x == 3) suit = "SPADES"; 
    //-------------------- 

    for(int y=2; y < 15; y++) { 
    cards[i] = new Card(y, suit); 
    i++; 
    } 
} 

당신은 또한 enum에 소송을 이동할 수 있습니다.

0

하나 이상의 루프를 사용하지 않으려면 다음을 수행 할 수 있습니다.

Card[] cards = new Card[52]; 
String type = ""; 
for(int i=0; i<52; i++) { 
    if (i<13) type = "CLUBS"; 
    else if (i<26) type = "DIAMONDS"; 
    else if (i<39) type = "HEARTS"; 
    else type = "SPADES"; 
    cards[i] = new Card(i%13, type); 
} 
0

느린 방법 :

for (String cardType: "CLUBS DIAMONDS HEARTS SPADES".split(" ")) { 
      for (int i = 2; i < 15; i++) { 
      cards[i] = new Card(i, cardType); 
     } 
    } 
관련 문제