문제

프로그래밍 수업의 경우 첫 숙제 과제를위한 블랙 잭 프로그램을 만들고 있습니다. 교수는 우리에게 샘플 카드 클래스를 제공했으며, 여기에는 데크에 추가하는 방법이 포함되어 있습니다. 그녀의 데크의 경우, 그녀는 Arraylist를 사용하여 Collections.shuffle () 메소드를 쉽게 셔플 할 수 있습니다.

이 방법은 스택에 대해서는 작동하지 않지만 (분명히) 스택 구조는이 프로그램에 가장 잘 작동한다고 생각합니다.

도움이 되었습니까?

해결책

둘 다 java.util.ArrayList<E> 그리고 java.util.stack<E> 구현 java.util.List<E> 인터페이스 및 Collections.shuffle() a java.util.List<?> 매개 변수로. 당신은 통과 할 수 있어야합니다 Stack ~ 안으로 Collections.shuffle(), 구현하지 않는 다른 스택 구현을 사용하지 않는 한 java.util.list<E>. 그렇다면 다른 스택 구현으로 전환하는 것이 좋습니다.

다른 팁

Arraylist에서 스택 작업을 수행하는 것이 훨씬 쉽다고 생각합니다.

스택은 목록이므로 스택에서 Collections.shuffle ()을 호출 할 수 있습니다.

즉, 스택은 벡터와 같은 오래된 클래스입니다. 요즘 당신은 a Dequeue (대기열 또는 스택으로 작동하는 이중 종료 큐) 스택보다는 하지만, Dequeues는 목록이 아니므로 섞을 수 없습니다.

또한 항상 카드를 목록에 넣고 셔플 한 다음 모든 카드를 Dequeue에 추가 할 수 있습니다.

스택 구조가 무작위로 액세스되어서는 안되는 이유는 없습니다 (Java.util.stack은 자체 문제가 있지만). 그 외에는 스택의 요소를 배열리스트에 넣고 셔플 한 다음 스택으로 밀어 넣을 수 있습니다.

아니요, Fisher-Yates Shuffle은 데이터 세트에 대한 임의의 액세스에 의존합니다. get (int index)를 허용하는 컬렉션이 필요합니다. 스택이 필요한 경우 목록을 사용하십시오. 푸시 앤 팝은 get (0)을 호출하고 (0)을 추가합니다. 이것은 일부 사용자 정의 스택 클래스를 구현하는 것보다 낫습니다. 당신이 가진 것을 사용하고, 새로운 수업을 발명하지 마십시오.

아담의 대답은 스택에 가장 적합합니다. 카드 게임의 경우, 내가 일반적으로 사용하는 것은 간단한 배열 목록이며 임의의 요소를 제거합니다. 셔플 링이 필요하지 않습니다.

카드를 스택에 올려 놓기 전에/셔플 만 셔플하십시오. 적절하게 구현 된 Knuth Shuffle은 이미 횡단 한 데크의 일부에 카드를 교체 할 수 없으므로, 당신이 따라 갈 때 간단히 스택에 배치 할 수 있습니다 ...

Java는 스택을 임의의 액세스 목록으로 취급 할 수 없으므로 스택에서 배열 목록에서 셔플 링 단계를 수행하기 만하면 셔플 링 단계를 수행 할 수 없습니다 (여분의 52 요소 배열 목록 노크는 큰 문제가 아닙니다).

collections.shuffle () 메소드는 당신을 위해 명시 적으로 할 필요가 없습니다.

"지정된 목록이 RandomAccess 인터페이스를 구현하지 않고 큰 경우,이 셔플 () 구현은 지정된 목록을 배열을 셔플하기 전에 배열에 버리고 셔플 된 배열을 목록에 다시 버립니다. "순차적 액세스"목록을 셔플 링하여. "

이것이 Java 문서가 Collections.shuffle () 메소드 구현에 대해 말하는 것입니다. java.util.stack을 전달합니다 (java.util.list 인터페이스의 구현)이 작동합니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top