2013-10-07 5 views
0

Java Book에서 배운 것을 실습 할 수 있도록 간단한 Blackjack 응용 프로그램을 만들려고합니다.Java : 카드 더미를 선언하는 가장 좋은 방법

"프로젝트"는 절대로 배포되지 않으며 "중요한"것이므로 나를 배우기 위해 카드 팩을 저장하는 가장 좋은 방법은 무엇이라고 생각하십니까?

내 선택은 단순한 배열, 2 차원 배열, 해시 맵 및 arraylist 인 것 같습니다. 나는 내 컬렉션에 내 카드를 일단

나는 구축 할 방법이 될 것이라고 생각 : - 자기 설명
removeCardsFromDeck() -

shuffleDeck() 그래서이 카드 게임은 "사용"하는
mergeNumberOfDecks (int howMany) - 병합 할 카드 갑판 수 (예 : 0 또는 2 또는 4 또는 8)

처리하기 가장 쉬운 방법은 다음과 같습니다. 간단한 배열, 2 차원 배열 , 해시 맵 또는 arraylist?

+3

네 가지 가능성의 장단점을 고려하고 평가해야합니다. 예를 들어, HashMap을 "섞어"어떻게 제안하고 키와 값은 무엇입니까? "간단한 배열"에서 카드를 어떻게 제거 하시겠습니까? 기타 – dcsohl

+0

'mergeNumberOfDecks'의 인터페이스를 이해할 수 없습니다. 왜 정수 만 받아들일까요? 2로 전화하면 어떻게 되나요? –

+0

@dcsohl, 나는 이것들을 배웠을 뿐이다. 4 가지를 모두 살펴보기에는 너무 많은 것을 배웠다. 소화하기에 너무 많은 정보가 너무 많아서, 나는 이것이 100 번 이상 해결되었다고 확신하면서 여기 묻는다. tieTYT,이 컬렉션 중 두 가지를 가져 와서 함께 병합하는 것으로되어 있습니다 ... – Ryan

답변

2

나열된 옵션 중 List은 작업하기 쉽고 섞인 후에 순서를 유지하므로 아마도 가장 적합합니다.

실제로 모두 구현하고 싶지 않다면 언급 한 세 가지 방법이 이미 구현되어 있습니다.

shuffleDeck() : Collections.shuffle(List)

removeCardsFromDeck() : 단일 카드

  • , 당신은 Collection.remove (객체) 및 관련 방법 (예를 들어, List.remove (INT 지수) 또는 사용할 수 있습니다 LinkedList.removeFirst()/LinkedList.removeLast() 또는 Stack.pop()) 예를 들어 Stack을 포함하고 있지만 동기화가 필요하지 않으면 사용하지 않는 것이 좋습니다.
  • 여러 개의 카드를 들어, Collection.removeAll(Collection)

mergeNumberOfDecks()를 사용할 수 있습니다 거기에 exact 아날로그가 아니라, Collection.addAll(Collection)이 작업은 매우

쉽게 목록이 컬렉션의 모든 상속 명심 할 것 메서드 및 List를 구현하는 모든 클래스는 Collection의 모든 메서드에 대한 구현을 정의해야합니다 (Collection에서 상속받은 메서드 포함)

+0

감사합니다. Google에서 자바 목록을 조회 할 것이고, 게시 한 4 가지 방법 만 발견했습니다. – Ryan

+1

명확히하기 위해'List'는'ArrayList'와'LinkedList'가 구현 한 인터페이스입니다. – rob

+0

여러분, 두 분 모두 대단 했으니 까 두 분 모두 upvote 할 것입니다. 두 분이 모두 훌륭하기 때문에 어떤 분이 "정답"으로 선택해야할지 모르시겠습니까? 다시 한 번 감사드립니다! – Ryan

4

대부분의 스택/데크 카드 상황은 Deque을 사용하여 가장 잘 해결됩니다. List 및 queue 메소드와 컬렉션이므로 다음을 수행 할 수 있습니다.

셔플 (경우 선택한 양단 큐는 목록 구현합니다) Collections.shuffle(List)에 의해 수행 예를 들어 LinkedList를 참조

카드를 제거 : - 이상적으로 상위 카드를 양단 큐 removeFirst()

병합 있습니다 java.util.collection가 (addAll(Collection)을 가지고 있으므로 하나를 컬렉션을 구현하는 클래스는이 메소드를 가짐)

+0

나는 "Deque"에 아직 오지 않았다, 나는 그것이 나의 책에서 더 멀리 온다 고 생각한다 :) 링크에 감사드립니다! 나는 방법을 찾고 있었고 나는 그것을 뒤섞을 어떤 방법도 보지 못했다. 나는 무엇인가 놓치고 있는가? – Ryan

+0

'Deque'는 인터페이스 일뿐입니다. Shuffle은'List'도 구현 한 클래스를 사용하고'Collections.shuffle (List) '를 사용할 수 있습니다. –

+0

여러분, 두 분 모두 굉장했기 때문에 두 분 모두 upvote 할 것입니다. , 어느 쪽이 옳은지를 "정답"으로 선택해야할지 모르겠다. 그래서 나는 먼저 대답 한 사람을 고를 것이다. 다시 한 번 감사드립니다! – Ryan

관련 문제