大家好,我正在阅读 Java 编程简介这本书,其中一个练习是:
经验洗牌检查。运行计算实验以检查我们的改组代码是否像宣传的那样工作。编写一个程序 ShuffleTest,它接受命令行参数 M 和 N,对大小为 M 的数组进行 N 次混洗,在每次混洗之前用 a[i] = i 初始化,并打印一个 M×M 表,使得第 i 行给出所有 j 的 i 在位置 j 结束的次数. 数组中的所有条目都应接近 N/M。
现在,这段代码只输出一个零块......
public class ShuffleTest2 {
public static void main(String[] args) {
int M = Integer.parseInt(args[0]);
int N = Integer.parseInt(args[1]);
int [] deck = new int [M];
for (int i = 0; i < M; ++i)
deck [i] = i;
int [][] a = new int [M][M];
for (int i = 0; i < M; i++) {
for (int j = 0; j < M; j++) {
a[i][j] = 0 ;
for(int n = 0; n < N; n++) {
int r = i + (int)(Math.random() * (M-i));
int t = deck[r];
deck[r] = deck[i];
deck[i] = t;
for (int b = 0; b < N; b++)
{
for (int c = 0; c < M; c++)
System.out.print(" " + a[b][c]);
System.out.println();
}
}
}
}
}
}
我究竟做错了什么?:(
谢谢