在一个由27个字符串组成的数组中,制作一个由9个唯一字符串组成的新数组

时间:2019-03-03 08:54:09

标签: java arrays duplicates processing

我正在努力解决以下问题。我正在为我的研究准备纸牌游戏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 ;
}

2 个答案:

答案 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 ;
}