我正在努力解决以下问题。我正在为我的研究准备纸牌游戏Set,目前我正在使用该功能来制作所有纸牌并将它们放置在27个字符串的阵列中。接下来,我创建了一个新函数,该函数将这个数组作为参数,对其进行迭代,并返回带有9个唯一的新字符串(卡)的新数组。这必须是随机的。
这个想法是,每次我选择27个字符串数组中的一个字符串时,都会用一个空字符串替换该字符串。在游戏结束时,该数组有27个空字符串,无法发牌。
我的问题是:有了这个主意,我怎么能防止这组9张独特卡片的新重复出现。学校和学校的提示:在随机范围内做一些事情。
所以基本上:当for循环选择“”时,必须跳过此步骤,以便在新阵列中有9个唯一的卡片。
这是在处理(java)中完成的。
这是我的代码:
String[] onScreen(String[] cards) {
String[] cardsToPlay = new String[9];
int index = 0;
int lengthArray = cards.length;
for(int i = 0; i < cardsToPlay .length; i++) {
int randomCard = int(random(lengthArray));
cardsToPlay[index] = kaarten[randomCard];
index++;
lengthArray--;
kaarten[randomCard] = "lege string";
}
return cardsToPlay ;
}
答案 0 :(得分:3)
一个更好的选择是运行9次迭代的循环。生成一个介于1-27之间的随机数,并从数组中检索该索引处的值,并将其添加到集合中(具有唯一值)。设定的时间长度达到9会中断循环。稍后将集合转换为9个元素组成的数组
答案 1 :(得分:2)
我建议从阵列kaarten
中删除随机卡。
使用函数shorten()
可以将数组的大小减小1。最后一个元素将从数组中删除。
如果从堆叠中选择了random
卡,则将该卡与堆叠中的最后一张卡交换:
String lastCard = kaarten[kaarten.length-1];
kaarten[kaarten.length-1] = kaarten[randomCard];
kaarten[randomCard] = lastCard;
现在,最后一张卡是被选择的卡。从堆栈中取出最后一张卡:
kaarten = shorten(kaarten);
函数onScreen
可能看起来像这样:
String[] onScreen() {
String[] cardsToPlay = new String[9];
for (int i = 0; i < cardsToPlay.length; i++) {
int randomCard = int(random(kaarten.length));
cardsToPlay[i] = kaarten[randomCard];
String lastCard = kaarten[kaarten.length-1];
kaarten[kaarten.length-1] = kaarten[randomCard];
kaarten[randomCard] = lastCard;
kaarten = shorten(kaarten);
}
return cardsToPlay ;
}