对于编程课,我正在为第一个家庭作业创建一个二十一点程序。教授给了我们一个示例 Card 类,其中包括将它们添加到牌组中的方法。对于她的牌组,她使用 ArrayList,您可以使用 Collections.shuffle() 方法轻松地进行 Knuth Shuffle。

虽然该方法不适用于堆栈(显然),但我认为堆栈结构最适合此程序,因为您可以将卡片弹出或推入牌组或从牌组中推出。

有帮助吗?

解决方案

两个都 java.util.ArrayList<E>java.util.stack<E> 实施 java.util.List<E> 接口,以及 Collections.shuffle() 需要一个 java.util.List<?> 作为参数。您应该能够通过 Stack 进入 Collections.shuffle(), ,除非您使用不实现的不同堆栈实现 java.util.list<E>. 。如果是的话,我建议您切换到不同的堆栈实现。

其他提示

我想这是很容易做的一个ArrayList堆栈操作。

一个堆栈是一个列表,所以你可以在栈上调用Collections.shuffle()。

也就是说,堆栈是一个古老的类,如Vector和种过时的。现在,你会使用出列(一双端队列其工作方式是队列或堆栈),而随后的堆叠的下,从队列不是列表,所以它们不能被混洗。

此外,您还可以随时把你的卡在一个列表,随机播放它们,然后所有的人都加入到一个出列

有任何理由的堆叠结构不应该是随机存取以及(java.util.Stack中那样,虽然具有其自己的问题)。除此之外,你可以弹出堆栈的元素复制到一个ArrayList,随机播放,然后把它们放回你的堆栈。

没有,费雪耶茨洗牌依赖于随机存取所述数据集。你需要收集一些,允许获得(INT指数)。如果你需要一个堆栈只使用一个列表。 push和pop只是调用get(0),并添加(0)。这比实现一些自堆栈类更好。用你所拥有的,不创造新的类。

亚当的回答是最适合的叠层。对于纸牌游戏,我通常使用的是一个简单的ArrayList和删除随机元素。不需要改组。

在刚洗牌/为你把卡压入堆栈。 由于正确实施克努特洗牌不允许在已经走过的甲板部分更换的卡,你可以简单地将它们放置到堆栈,你走......

由于Java不会让你把一个堆栈作为一个随机访问列表从堆栈只是复制到一个ArrayList做洗牌阶段(额外52元的ArrayList寻花问柳也没什么大不了的)

Collections.shuffle()方法,对于你你没有明确。

“如果指定列表不实现RandomAccess接口和大时,这种实现混洗的()将指定列表转储到一个数组改组它之前,和转储改组阵列回列表。这避免了二次行为这将导致在地方洗牌“连续访问”清单“。

这是Java文档说,大约Collections.shuffle()方法实现 所以传递java.util.Stack中(java.util.List的接口的实现)应该工作...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top