如何在Java中随机填充数组?

时间:2010-03-23 00:40:51

标签: java arrays

我正在编写一个从整数n创建2D数组的程序。然后我必须用1到n n数组大小的值填充数组,并检查它是否是魔术方块。我现在这样做的方式是从1到n n数组大小的顺序填充数组。我怎么能随意做出来?

我的代码:

System.out.print("Enter an whole number: ");
     int n = scan.nextInt();

     int [][] magic = new int [n][n];

     for (int row = 0; row < magic.length; row++)
     {
        for(int col = 0; col < magic[row].length; col++)
            magic[row][col] = ((row * n) + 1) + col;
     }

3 个答案:

答案 0 :(得分:3)

您需要shuffle这些值。你可以将每一行,然后是每一列混洗,但我建议你把所有的值都放在一个大的n * n 1D数组中,然后将其洗牌,然后填充2D数组。

答案 1 :(得分:2)

创建一个随机数字列表以添加到数组中,如下所示:

 List<Integer> numbers = new ArrayList<Integer>();
 for (int i=1; i<=n*n; i++) numbers.add(i);
 Collections.shuffle(numbers);

 int [][] magic = new int [n][n];

 int index = 0;
 for (int row = 0; row < magic.length; row++)
 {
    for(int col = 0; col < magic[row].length; col++)
        magic[row][col] = numbers.get(index++);
 }

答案 2 :(得分:0)

创建值为0到n * n-1的随机方阵:

System.out.print("Enter an whole number: ");
int n = scan.nextInt();
int size = n * n;

// create see dvalues
List<Integer> values = new ArrayList<Integer>(size);
for (int i=0; i<size; i++) {
  values.add(i);
}
Collections.shuffle(values);

// now create the magic square
int[][] magic = new int[n][];
int index = 0;
for (int i=0; i<n; i++) {
  magic[i] = new int[n];
  for (int j=0; j<n; j++) {
    values.get(index++);
  }
}

使用范围1到n * n只是稍作修改。

第一阶段使用唯一值对范围进行种子化,然后使用标准函数Collections.shuffle()随机化顺序。