在一个包含 27 个字符串的数组中创建一个包含 9 个唯一字符串的新数组

In an array of 27 strings make a new array of 9 unique strings

我正在努力解决以下问题。我正在为我的学习制作纸牌游戏集,我目前正处于拥有制作所有纸牌并将它们放入 27 个字符串的数组中的功能的地步。接下来,我创建了一个新函数,它将此数组作为参数,遍历它并 returns 一个包含 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 ;
}

我建议从数组中删除随机卡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 ;
}

对您来说更好的选择是 运行 循环 9 次迭代。生成 1-27 之间的随机数,并从数组中检索该索引处的值并将其添加到集合中(以具有唯一值)。 set 的矩长度达到 9 时打破循环。稍后将集合转换为包含 9 个元素的数组 an