java 板


LINE

大家好,小弟刚开始自学java卡这个问题好几天了... 这段是参考"java se7 技术手册"後面的习题答案, 看了很久一直不懂在产生"乱数"(8~16行)後之後x[i]的值会刚好是1~52的数序, 而不会因为新的乱数造成重覆值的发生呢??麻烦大家可以为小弟解惑,谢谢^^ public class s0402 { public static void main(String[] args ) { final int N = 52; int[] x = new int[N + 1]; for(int i =1; i <= N; i++) { x[i] = i; } for(int i = 1; i <= N; i++) { int j = (int) (Math.random()*N); if(j == 0){ j = 1; } int tmp = x[i]; x[i] = x[j]; x[j] = tmp; } for(int i = 1; i <= N; i++) { switch((x[i] - 1) / 13) { case 0: System.out.print("梅"); break; case 1: System.out.print("桃"); break; case 2: System.out.print("砖"); break; case 3: System.out.print("心"); } int remin = x[i] % 13; switch(remin) { case 0: System.out.print(" K "); break; case 12: System.out.print(" Q "); break; case 11: System.out.print(" J "); break; default: System.out.printf("%2d ",remin); } System.out.printf("%c",i % 13 == 0 ? '\n' : ' ' ); } } } --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.137.122.127
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1444544544.A.D2D.html ※ 编辑: maple0517 (223.137.122.127), 10/11/2015 14:30:35
1F:推 LPH66: 这本书这个程式码可惜了, 它有想要使用正确的洗牌法 10/11 18:29
2F:→ LPH66: 但细节错了, 造成它的洗牌还是不均匀的 10/11 18:30
3F:→ LPH66: 原 PO 的问题可以注意到这段回圈每次都是交换两个元素 10/11 18:30
4F:→ LPH66: 不过!这支程式还有一个问题是故意使用 1 起算的索引 10/11 18:32
5F:→ LPH66: 如果这本书其他程式都是这样的话那可以考虑换掉书了 10/11 18:32
6F:→ lucky1lk: 你就再检查是否有重复值(in array) 10/11 20:27
7F:→ b9602003: 看起来在, 回圈x, 并随机取一做交换 10/11 23:51
8F:→ b9602003: 注意应有的排列组合(机率) 10/11 23:51
9F:→ b9602003: 即使没有重复值,机率错了就不算乱数 10/11 23:55
10F:→ b9602003: 可以简化拿三张牌不同做法玩玩看 10/12 00:08
11F:推 lno96825155: 只要 j在0到52间均匀分布 洗出来的结果似乎是乱数没 10/12 10:42
12F:→ lno96825155: 错 否则哪种牌型机率较大? 10/12 10:42
int tmp = x[i]; x[i] = x[j]; x[j] = tmp; 所以上面三行是做乱数排序,并不是直接把值给对方?? 这三行是我看不懂的地方......@@ 假如 i=1,j=5 int tmp=x[1] x[1] = x[5] x[5] = x[1] 所以 x[1]=5? x[5]=1?
13F:推 gundan: 上面三行做的是交换这两个的内容 10/12 21:02
14F:→ gundan: i=1 j=5 x[1]=1 x[5]=5做完之後 x[1]=5 x[5]=1 没错 10/12 21:03
感谢M大我看懂了!!!
15F:→ b9602003: http://goo.gl/43y6J3 参考Shuffling开始 10/12 22:27
16F:→ b9602003: 关於我指的机率不对的问题 10/12 22:34
B大这个我需要时间吸收一下,因为都是英文阿XDD ※ 编辑: maple0517 (218.210.103.174), 10/12/2015 23:58:23
17F:推 perfects1988: 其实了解他的程式意涵就好了 10/13 23:33
18F:→ perfects1988: 这是演算法的一种...初学者应该不用太着重这个 10/13 23:34
19F:推 obelisk0114: http://tinyurl.com/nkjmklc 10/22 01:42







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP