我正在创建一个纸牌游戏,并希望迭代所有可能的纸牌组合。
例如(红心A,红心2),(红心A,黑桃2),(红心A,梅花2)等
我在用Java做这个
目前我有这个:
首先,我有
List<Card> deckOfCards = new ArrayList<Card>();
这是一副包含所有卡片的牌。然后我创建一个
Queue<Card> deckOfCardsWithoutDuplicates = new LinkedList<Card>();
deckOfCardsWithoutDuplicates = deckOfCards;
现在我想遍历所有没有重复的卡片。
for (Card c : deckOfCards) {
deckOfCardsWithoutDuplicates.remove(c);
for (Card c1 : deckOfCardsWithoutDuplicates) {
//something here irrelevant
}
deckOfCardsWithoutDuplicates.add(c);
}
然而,我得到了一个java.util.ConvoltModificationException
。有人能给我一些关于如何做得更好的提示吗?
尝试使用迭代器而不是foreach循环
Iterator<Card> iter = deckOfCards.iterator();
while (iter.hasNext()) {
//your logic here
}
当您使用foreach循环时,您隐式地使用了迭代器。
当集合通过迭代器通过任何方式(迭代器除外)“同时”修改集合时,就会发生异常。
模式Singleton和Builder将为您提供帮助。
单身汉是用来套用和估价卡片的。
套房示例:
public class Suit {
private String suit;
private Suit(String name) {suit = name;}
public String toString() {return suit;}
public final static Suit CLUBS = new Suit("clubs");
public final static Suit DIAMONDS = new Suit("diamonds");
public final static Suit HEARTS = new Suit("hearts");
public final static Suit SPADES = new Suit("spades");
}
对于value类也是一样,Card类也应该是单例,但它们太多了,应该是其他两个单例(Suite和value)的组合:
public class Card {
private Suit s;
private Value v;
protected Card() {}
protected Card(Suit s, Value v) {
this.s = s;
this.v = v;
}
}
卡片生成器提供的唯一卡片si保证(使用生成器模式):
import java.util.Hashtable;
public class CardBuilder extends Card {
private Hashtable<String,Card> _cards = new Hashtable<String,Card>();
public Card getCard(Suit s, Value v) {
String key = s.toString() + v.toString();
Card result = _cards.get(key);
if (result == null) {
result = new Card(s,v);
_cards.put(key,result);
}
return result;
}
}
现在你有了所有你需要的哈希表,跟踪你使用的卡片,不要在上面使用它。现在你可以在高级检查中检查你的实现:
public class Game {
public static void main(String args[]) {
CardBuilder cb = new CardBuilder();
Card c1 = cb.getCard(Suit.HEARTS, Value.JACK);
Card c2 = cb.getCard(Suit.HEARTS, Value.JACK);
if (c1 == c2) System.out.println("Ok!!!");
else System.out.println("Something wrong in you implementation!");
}
}
我希望这个例子能帮助你实现游戏:)
这是因为您试图从循环浏览的列表中删除。
要从循环遍历的列表中删除,您需要使用迭代器
我需要迭代两个元素的所有组合:在集合[1,2,3,4]中,我想迭代[(1,2),(1,3),(1.4),(2,3),,(2,4),(3,4)]。是否有现有的工具可以执行此操作? 这段代码将执行两倍于所需的操作,因为在两个循环中都将访问每个对象。 为此编写自己的方法是微不足道的,我只是不想发明轮子。我期望在Guava或Collections API中找到这个,但是没有找到这样的功能。
问题内容: 说我有一个列表L。如何获得K组所有分区上的迭代器? 示例:L = [2,3,5,7,11,13],K = 3 3组的所有可能分区的列表: ===更新=== 我正在研究一个似乎可行的解决方案,所以我只复制粘贴它即可 输出: 问题答案: 这可行,尽管它可能超级无效(我将它们全部排序以避免重复计算): 它还返回空簇,因此您可能希望将其包装起来以便仅获取非空簇: 计数只是为了检查: 有用 !
在我的应用程序中,我需要数组1的给定大小k的所有子集。。n 这可以使用递归方法轻松完成,并存储沿途找到的所有子集。然而,我不希望我的应用程序使用指数级的内存量[O(n^k)]。 因此,我想编写一个实现(Java)的类来迭代所述子集。 所以我可以如下使用它: 显然,我们需要存储最后返回的当前子集,它被初始化为1... k。但是如何从这个当前子集计算下一个子集呢?
卡片是包含一组特定数据集的纸片,数据集含有各种相关信息,例如,关于单一主题的照片,文本,和链接。卡片通常是通往更详细复杂信息的入口。卡片有固定的宽度和可变的高度。最大高度限制于可适应平台上单一视图的内容,但如果需要它可以临时扩展(例如,显示评论栏)。卡片不会翻转以展示其背后的信息。 用途 卡片是用来显示由不同种类对象组成的内容的便捷途径。它们也适用于展示尺寸或操作相当不同的相似对象,像带有不同长度
在此模板中,卡片组件是使用最广泛的。你可以将其用于显示图表、文本块等。有许多不同的样式,我们将在下面进行介绍。 默认卡片标记 <div class="card"> <div class="card-header"> <h3 class="card-title">默认卡片示例</h3> <div class="card-tools"> <!-- 按钮,标签和其
问题内容: 好的,我认为这可能是一个老问题,但是我在stackoverflow上没有发现任何东西。在go中,不保证地图上的迭代顺序是可重现的。因此,建议的方法是将键保留在一个切片中并对该切片进行排序。然后,对该切片进行迭代以从映射中检索值,以便我们按顺序获取它们(因为由键组成的切片已排序,因此将以可再现的顺序排列)。因此,这意味着需要对切片进行排序,否则切片上的迭代也不会给出可重现的顺序。但是,当