[問題] 新手問題 撲克牌洗牌
大家好,小弟剛開始自學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://www.ptt.cc/bbs/java/M.1444544544.A.D2D.html
※ 編輯: maple0517 (223.137.122.127), 10/11/2015 14:30:35
推
10/11 18:29, , 1F
10/11 18:29, 1F
→
10/11 18:30, , 2F
10/11 18:30, 2F
→
10/11 18:30, , 3F
10/11 18:30, 3F
→
10/11 18:32, , 4F
10/11 18:32, 4F
→
10/11 18:32, , 5F
10/11 18:32, 5F
→
10/11 20:27, , 6F
10/11 20:27, 6F
→
10/11 23:51, , 7F
10/11 23:51, 7F
→
10/11 23:51, , 8F
10/11 23:51, 8F
→
10/11 23:55, , 9F
10/11 23:55, 9F
→
10/12 00:08, , 10F
10/12 00:08, 10F
推
10/12 10:42, , 11F
10/12 10:42, 11F
→
10/12 10:42, , 12F
10/12 10:42, 12F
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?
推
10/12 21:02, , 13F
10/12 21:02, 13F
→
10/12 21:03, , 14F
10/12 21:03, 14F
感謝M大我看懂了!!!
→
10/12 22:27, , 15F
10/12 22:27, 15F
→
10/12 22:34, , 16F
10/12 22:34, 16F
B大這個我需要時間吸收一下,因為都是英文阿XDD
※ 編輯: maple0517 (218.210.103.174), 10/12/2015 23:58:23
推
10/13 23:33, , 17F
10/13 23:33, 17F
→
10/13 23:34, , 18F
10/13 23:34, 18F
推
10/22 01:42, , 19F
10/22 01:42, 19F