0

是否可以在 java 中使用主题标签?哈希标签是否有任何用途?

4

4 回答 4

1
for (k = 52; k<deck.length; k--){

这个循环不好构建。

如果从 k = 52 开始,则要循环直到 k 为 1(因为不需要与自己交换最后一个元素)。这样,k 不会小于 deck.lenght 并且循环体将永远不会执行。

将其更改为

for (k = deck.length; k >= 1; k--){

然后,当你做这个时:

for (l = 0; l<k; l++){

k 将是 0,所以这个循环也会有同样的问题,所以把它改成

for (l = 0; l<deck.length; l++){

更进一步,Fisher-Yates shuffle 将每个元素与集合中剩余的元素之一交换,所以

int index = shuffle.nextInt(k-1);

会更正确

于 2013-11-07T01:22:34.870 回答
0

您发布的代码中的for循环main()从两个字符串数组构建卡片组并在构建它时将其打印出来,但是在构建卡片组之后,您实际上并没有对其进行洗牌。

在您最初的 for 循环之后,您必须调用ShuffledDeck(应该调用shuffleDeck然后循环遍历数组再次打印每张卡片。基本上:

for (int i = 0;  i<number.length; i++) {
    // ...building the deck as before...
}

shuffleDeck(deck);

for (int i = 0; i<deck.length; i++) {
    System.out.println(deck[i]);
}
于 2013-11-07T02:03:17.647 回答
0

正如我在评论中提到的,您可以简化您的shuffledDeck()方法:

public static void shuffledDeck(String[] deck) {

    List<String> shuffledDeck = new ArrayList(Arrays.asList(deck));
    Collections.shuffle(shuffledDeck);

    for (String card : shuffledDeck){
        System.out.println(card);
    }
}
于 2013-11-07T01:46:57.483 回答
0

你在你的 for 循环中想要的是

for(k = deck.length - 1; k >= 0; k--)

你的索引是关闭的,它永远不会进入洗牌算法(我没有检查它的正确性仅供参考,所以你可能会遇到其他问题)

于 2013-11-07T01:20:22.033 回答