我在Java中洗牌二维数组时遇到问题。有10张底牌。
这是阵列:
String[][] Cards = new String[][] {
{"CardType1","CardName1","CardProperties"},
{"CardType1","CardName2","CardProperties"},
{"CardType1","CardName3","CardProperties"},
{"CardType2","CardName4","CardProperties"},
{"CardType2","CardName5","CardProperties"},
{"CardType2","CardName6","CardProperties"},
{"CardType2","CardName7","CardProperties"},
{"CardType3","CardName8","CardProperties"},
{"CardType3","CardName9","CardProperties"},
{"CardType3","CardName10","CardProperties"}
};
每张牌必须复制4次,才能完成一副40张牌的牌组,然后洗牌。如何使用Java来实现这一点?
首先,你有点物体恐惧症。让我们从卡片类型的
枚举开始:
public enum CardType {
TYPE_1,
TYPE_2,
TYPE_3,
//etc...
;
}
不确定卡片名称是什么,但让我们把它作为一个
String
。也不确定卡片属性是什么——让我们称之为地图
public class Card {
private final CardType cardType;
private final String cardName;
private final Map<String, String> properties = new HashMap<>();
Card(final CardType cardType, final String cardName) {
this.cardType = cardType;
this.cardName = cardName;
}
public Card setProperty(final String name, final String value) {
properties.put(name, value);
return this;
}
public String getProperty(final String name) {
return properties.get(name);
}
}
添加getter和setter,以及
toString
、equals
和hashCode
方法。可能使卡
实现可比性
所以要创建一个
Card
,您可以调用:
final Card card = new Card(CardType.TYPE_1, "CardName1");
要设置属性,因为该方法是可链接的,所以可以执行以下操作:
final Card card = new Card(CardType.TYPE_1, "CardName1").
setProperty("prop1", "thing").
setProperty("prop2", "stuff");
现在,要创建牌组,每种类型需要4张牌,这很简单。使用Java 8:
final List<Card> deck = Stream.of(CardType.values()).
flatMap(type -> IntStream.rangeClosed(1, 4).mapToObj(num -> new Card(type, "CardName" + num))).
collect(toList());
Java 8之前版本要创建
列表
,可以使用显式循环:
final List<Card> deck = new LinkedList<>();
for (final CardType cardType : CardType.values()) {
for (int i = 1; i <= 4; ++i) {
final Card card = new Card(cardType, "CardName" + i);
deck.add(card);
}
}
要洗牌
集合
,只需使用集合即可。洗牌
像这样:
Collections.shuffle(deck);
问题内容: 如何在Swift中随机或随机排列数组中的元素?例如,如果我的阵列由52张扑克牌,我想 洗牌 的阵列,以洗牌。 问题答案: 该答案详细说明了如何在Swift 4.2+中使用快速统一的算法(Fisher- Yates)进行改组,以及如何在各个早期版本的Swift中添加相同功能。每个Swift版本的命名和行为都与该版本的变异和非变异排序方法匹配。 并且是从Swift 4.2开始原生的 用法示
我有一个名为$PRODUCTS_LIST的数组,它填充了数据,结构如下: 如果数组中的值具有相同的描述和条件,我正在尝试从数组中删除任何重复值,并合并重复值中的数量。 我尝试将数据设置为临时数组,以便能够将两个数组比较为foreach语句。类似这样的事情:
问题内容: 假设我有一个数组 如何(有效地,以Python方式)找到重复的元素(即非唯一值)?在这种情况下,结果将是有效的,或者可能是有效的。 我想出了一些可行的方法: 掩蔽 设定操作 这个很可爱,但可能是非法的(实际上并不是唯一的): 直方图 排序 大熊猫 有什么我想念的吗?我不一定要寻找仅numpy的解决方案,但它必须与numpy数据类型一起使用,并且必须在中等大小的数据集(最大1000万个大
问题内容: 我有以下数组: 结果: 现在如何显示具有重复值的键?在此函数不应返回([0],[9]),因为没有重复的值。 如何找到相同值的键,例如 对于“ 2011-06-25”,应返回[7],[8] 问题答案: 函数名称显然很长;) 现在$ dups将包含一个由重复值键控的多维数组,其中包含每个重复项的键,如果您将“ true”作为第二个参数发送,它将返回没有重复值的原始数组。 或者,您可以将原始
我试图解开这个xml片段 但是尽管我采取了行动,结果总是几乎相同的(4个或2个空字段): 我以前的操作是:定义构造函数(所有字段,没有字段),添加setter和getter,并将其标记为@xmlement。对具有属性顺序的子类使用@XmlType。还尝试使用包信息和ObjectFactory。我从Stack Overflow的示例中尝试过的当前版本:由于所有字段的名称都是匹配的xml字段,因此只能
在mongodb中,我有一个集合,其中数组有重复的条目,如 我需要删除重复的数组,只保留唯一的数组值,如下所示。 最好的方法是什么 谢啦