当前位置: 首页 > 知识库问答 >
问题:

纸牌力量技巧。如何完成完美的洗牌或即兴洗牌

陆栋
2023-03-14

我已经完成了完美洗牌的几乎所有java代码。我只是在与错误作斗争:“线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:索引26长度26在cards\u shuffle.main(cards\u shuffle.java:72)”此错误指的是行:



Output:

洗牌牌组的上半部分:

黑桃4黑桃10钻石8黑桃A钻石4红桃J红桃Q黑桃Q黑桃4钻石J黑桃K红桃K红桃5红桃10红桃9黑桃2梅花6黑桃K钻石3梅花7黑桃J钻石3红桃7钻石3钻石9红桃A梅花5钻石

洗牌牌组的下半部分:

红桃6红桃7红桃10梅花王牌红桃2红桃皇后方块6梅花8方块黑桃王5黑桃皇后梅花9梅花2黑桃3黑桃9方块黑桃王牌10黑桃王牌梅花7梅花2方块6方块4梅花8红桃5梅花8梅花J梅花

洗牌:

6颗红心

I have just included the 6 of Hearts once but it prints out 52 times.

Any help with this error would be greatly appreciated. 

共有1个答案

井昊乾
2023-03-14

您的变量i超过了上半部分的数组界限,因为它在下半部分的内环中递增。长度倍。此外,您根本不应该增加变量i,因为您希望从上到下填充卡片力。否则,您应该为其使用单独的索引。

尝试

int i = top_half.length - 1;
int j = bottom_half.length - 1;
int index = 51;
while (index >= 0) {
    card_force[index--] = top_half[i--];
    card_force[index--] = bottom_half[j--];
}
 类似资料:
  • 题目详情 有个长度为2n的数组{a1,a2,a3,…,an,b1,b2,b3,…,bn},希望排序后{a1,b1,a2,b2,….,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法。 题目来源:此题是去年2013年UC的校招笔试题,看似简单,按照题目所要排序后的字符串蛮力变化即可,但若要完美的达到题目所要求的时空复杂度,则需要我们花费不小的精力。OK,请看下文详解,一步步优化。

  • 大多数纸牌游戏都需要洗牌,也就是让纸牌随机排列。在第10.5节,我们看到了怎样生成随机数,但怎样利用随机数实现洗牌功能却并非显然意见的。 一种可行的方案是,模拟人洗牌的方法,将牌分为两堆,然后通过在每个牌堆中轮流选择的方式实现原牌堆的重新组织。因为一般而言,人并不能做到完美地洗牌,而程序经过大约7次迭代之后,牌堆中纸牌的顺序已经相当随机了。但是计算机程序每次在做完美洗牌的时候有一个令人讨厌的属性—

  • 在第13.6节我们编写了一个洗牌算法的伪代码。假设shuffleDeck函数实现洗牌功能,其参数为一个牌堆,我们就可以这样创建牌堆并洗牌: Deck deck; // 创建一个标准的52张牌的牌堆 deck.shuffle (); // 洗牌 然后,使用subdeck函数来分几手牌: Deck hand1 = deck.subdeck (0, 4); Deck hand2 = dec

  • 问题内容: 我想知道,是否有某种方法可以在mysql / sql中改组字符串的字母,即类似 伪代码的内容 :? 从http://dev.mysql.com/doc/refman/5.0/en/string- functions.html 找不到任何内容,对其进行搜索似乎只是找到改组结果的解决方案,而不是字符串。 问题答案: 干得好: 有关输出,请参见sqlfiddle.com。 已使用mariad

  • 我有以下数据帧: 数据帧是从csv文件中读取的。所有类型为1的行都位于顶部,后面是类型为2的行,后面是类型为3的行,以此类推。 我想改变数据帧行的顺序,这样所有的都是混合的。一个可能的结果可能是: 我怎样才能做到这一点?

  • Reference 关于乱序(shuffle)与随机采样(sample)的一点探究 - xybaby - 博客园 洗牌算法 Fisher–Yates shuffle - Wikipedia Knuth-Durstenfeld Shuffle(Fisher–Yates Shuffle 改进版) Knuth-Durstenfeld Shuffle 是一个“原地”(in-place)算法 伪代码 To