2016-10-19 2 views
0

카드 덱에 카드 값이 나타나는 횟수를 세는 방법을 찾으려고합니다. 저는 Card와 DeckHand를위한 수업을 만들었습니다. DeckHand 클래스에서 사용자가 검색 및 계산할 카드 값을 선택할 수있는 메서드를 만들려고합니다. 이 방법을 몇 가지 시도했는데 아무 것도 작동하지 않는 것 같습니다. 어떤 아이디어?카드 덱에 카드 값이 나타나는 횟수를 카운트하는 방법

카드 등급 :

class Card { 
private int _value, _suit; 
private String[] _cardValues = {null, "Ace", "2", "3", "4","5", "6", "7", 
    "8", "9", "10", "Jack", "Queen", "King"}; 
private String[] _cardSuits = {null, "Clubs", "Diamonds", "Hearts", "Spades"}; 

public Card(int value,int suit) { 
    _value = value; 
    _suit = suit; 
} 
public int getCardValue() { 
    return _value; 
} 
public int getCardSuit() { 
    return _suit; 
} 
public String toString() { 
    return _cardValues[_value] + " of " + _cardSuits[_suit]; 
} 

} 갑판 클래스 :

class DeckHand{ 
     private Card[] _deckHand; 
     private int _deckSize; 
     private static final int MAXSIZE = 52; 
     private Card[] newDeck; 

     public DeckHand() { 
      _deckHand = new Card[MAXSIZE]; 
      _deckSize = 0; 
     } 
     public DeckHand(int deckSize) { 
      _deckHand = new Card[MAXSIZE]; 
      int index = 0; 
      for (int suit = 1; suit <= 4; suit++) { 
       for (int rank = 1; rank <= 13; rank++) { 
        _deckHand[index] = new Card(rank, suit); 
        index++; 
       } 
      } 
     _deckSize = deckSize; 
     } 
     public int count(int value){ 
      int count = 0; 
      for (int i = 0; i<=_deckSize; i++) { 
       if(_deckHand[i].getCardValue()==value) 
        count++; 
     } 
     return count; 
} 
} 

홈페이지 :

public class Program4 { 
    static Scanner keyboard = new Scanner(System.in); 
    public static void main(String[] args) { 
    int suit, value; 
    DeckHand standard = new DeckHand(52); 
    System.out.println("\nWhich card value would you like to count?"); 
    String[] values = {null, "Ace", "2", "3", "4","5", "6", "7", 
     "8", "9", "10", "Jack", "Queen", "King"}; 
    System.out.println("Card Value Options: " 
      + "\n-------------------"); 
    for(int i = 1;i<values.length; i++) { 
     System.out.println(i + " - " + values[i]); 
    } 
    System.out.print("\tOption: "); 
    value = keyboard.nextInt(); 
    System.out.println("---------------------------" 
     + "-----------------------------\n" 
     + "The card value " + value appears " + standard.count(value) 
     + " times in the deck." 
} 

나는를 선택하도록 사용자에게 요청하는 프로그램을 얻으려고 카드의 배열을 찾아 그 카드 값이 몇 번이나 나오는지 (예 : 2 또는 5) 및 th 그 번호가 사용자에게 출력된다. "그 카드 가치는이 횟수만큼 갑판에 나타납니다"). 이 오류입니다

if(_deckHand[i].getCardValue()==value) 

: :이 실행하려고 할 때, 내가 가진 전부는 "그 카드 값은 갑판에서 0 번 나타납니다"또는 나는이 라인에 문제가있다라는 오류를 얻을 수있다

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 52 
    at program4.DeckHand.count(Program4.java:231) 
    at program4.Program4.main(Program4.java:101) 
C:\Users\alisa_000\AppData\Local\NetBeans\Cache\8.1\executor-  
snippets\run.xml:53: Java returned: 1 
+1

게시 한 코드가 정상적으로 보입니다. 정확히 무슨 일이 일어나기를 기대하는지 정확히 무슨 일이 벌어지는 지에 대해 더 구체적으로 설명하십시오. 주어진 입력과 출력을 보여줍니다. – nhouser9

+0

명확히하지 않아서 죄송합니다. 나는 사용자가 카드 배열을 찾아 그 카드 값이 몇 번 나타나는지 (예 : 2 또는 5)를 계산 한 다음 사용자에게 출력 할 값을 선택하도록 프로그램을 요청하려고합니다. 즉 "그 카드 가치는이 횟수만큼 갑판에 나타납니다"). 그러나 이것을 실행하려고하면 "그 카드 값이 갑판에 0 번 나타납니다."라고 표시되거나이 라인에 문제가 있다는 오류가 표시됩니다. if (_deckHand [i] .getCardValue() == value) – Alisa

+0

정확히 어떤 오류가 있습니까? 질문에 붙여 넣을 수 있습니까? – nhouser9

답변

1

예외는 for 루프로 인해 발생합니다. 0에서 52까지 실행됩니다. 카드 배열의 최대 크기는 52이므로 0-51 (52 값)의 카드가 있습니다. 인덱스 52에서 카드에 액세스하려고하면 단순히 존재하지 않기 때문에 indexArrayOutOfBoumdsException이 발생합니다.

for(int i = 0;i<=_deckSize;i++){ 

하려면 : 당신은에서 루프 당신을 변경해야합니다 Indtead

for(int i = 0;i<_deckSize;i++){ 

공지 사항 (가) "="이 사라 방법, 지금은 인덱스 (52) 또는 갑판의 53 카드에 액세스하지 않습니다.

+0

그 조각을 고쳤지만 여전히 오류 메시지가 다시 나타납니다. – Alisa

+0

@Alisa 그것은 무엇이라고 말합니까? – Lucurious

+0

신경 쓰지 마라, 지금 일하는 것처럼 보인다! 감사합니다 – Alisa

관련 문제