【问题标题】:Card Force Trick. How to complete the perfect shuffle or riffle shuffle卡力技巧。如何完成完美的 shuffle 或 riffle shuffle
【发布时间】:2020-04-05 16:45:03
【问题描述】:

我已经完成了几乎所有完美随机播放的 java 代码。我只是在为错误而苦苦挣扎:“线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:索引 26 在cards_shuffle.main(cards_shuffle.java:72)处的长度为26的范围外”此错误指的是以下行:



Output:

洗牌后的上半部分:

黑桃4 10颗钻石 黑桃8 钻石王牌 红心4 红心杰克 红桃皇后 黑桃皇后 4颗钻石 黑桃杰克 红心之王 红心5 红心10 黑桃9 2 俱乐部 黑桃6 钻石之王 3 俱乐部 黑桃7 钻石杰克 红心3 7颗钻石 3 钻石 红心9 梅花王牌 5颗钻石

洗牌后的下半部分:

红心6 红心7 10 个俱乐部 红心王牌 红心2 钻石女王 6 俱乐部 8颗钻石 黑桃王 黑桃5 俱乐部女王 9 俱乐部 黑桃2 黑桃3 9颗钻石 黑桃王牌 黑桃10 俱乐部之王 7 俱乐部 2颗钻石 6颗钻石 4 俱乐部 红心8 5个俱乐部 8个俱乐部 俱乐部杰克

洗牌:

红心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. 

【问题讨论】:

  • 我假设你对循环感到困惑,我在下面提出了一个解决方案,让我知道它是否对你有帮助

标签: java for-loop intellij-idea indexoutofboundsexception


【解决方案1】:

您的i 变量超出了top_half 的数组边界,因为它在内部循环中增加了bottom_half.length 次。 此外,您根本不应该增加变量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--];
}

【讨论】:

  • 非常感谢您的帮助。尝试您的解决方案,程序现在打印出 bottom_half 中的第一项 52 次。我会继续尝试这个程序,看看我是否能解决它。
  • @NaomiReynolds 你的意思是,card_force[] 仅由 bottom_half 的第一项的副本填充?
  • @NaomiReynolds 你能把程序的完整输出给我吗?
  • 是的,这就是我的意思,红心 6(下半部分的第一项)在输出中产生了 52 次。
  • 我已经编辑了帖子以显示当前代码
猜你喜欢
  • 1970-01-01
  • 2014-05-07
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 2018-10-30
  • 1970-01-01
相关资源
最近更新 更多