Java:如何随机初始化用户定义的2D数组的顺序?

时间:2016-02-15 18:52:07

标签: java multidimensional-array

我正在开发一个程序,用户选择方形NxN数组的大小,其中N是它们选择的数字,表示行数和列数。

我的程序背景是制作N益智游戏。因此,无论用户选择何种大小,数值空间的值都为0 - 例如,如果用户选择3作为大小,这将是一个3 x 3数组,这意味着数字将有9个空格,数字将是0 - 8.

到目前为止,这是我的代码:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);      
    System.out.print("Enter dimension n of an nxn puzzle:");      

    int n = Integer.parseInt(scanner.nextLine());

    int[][] puzzle = new int[n][n]; 
}

所以基本上我必须弄清楚如何初始化它,以便值以随机顺序排列,并且值必须与那些特定数字(0-8或基于用户想要的情况)无关。

此外,我们不允许使用任何外部算法,例如Fisher-Yates Shuffle算法。

3 个答案:

答案 0 :(得分:0)

实际上阵列的尺寸根本不重要。

随机初始化的一种简单方法是:

  1. 按值出现的顺序初始化数组
  2. 遍历所有元素,并将其值与数组中随机选择的元素的值互换。

答案 1 :(得分:0)

这可能是您的方式,除非每个号码只允许出现一次:

public int[][] initRandomArray(int n){
    int[][] puzzle = new int[n][n];
    Random random = new Random();
    for(int x = 0; x < puzzle.length; x++)
        for(int y = 0; y < puzzle.length; y++)
            puzzle[x][y] = random.nextInt(n * n);
    return puzzle;
}

修改 我想我现在有了你的问题。这应该可以帮到你:

public int[][] initRandomArray(int n){
    int[][] puzzle = new int[n][n];

    ArrayList<Integer> numbers = new ArrayList<Integer>();
    for(int i = 0; i < n * n; i++)
        numbers.add(i);

    Random random = new Random();
    for(int x = 0; x < puzzle.length; x++)
        for(int y = 0; y < puzzle.length; y++)
            puzzle[x][y] = numbers.remove(random.nextInt(numbers.size()));
    return puzzle;
}

答案 2 :(得分:0)

您可以使用嵌套for循环遍历数组,在通过Java提供的随机类进行迭代时分配数组的每个值。如果您在阵列中无法重复数字,则可能需要检查数字是否已被使用

LocalBusiness

有很多方法可以检查是否已经使用了一个值(当我有这样的项目时,我使用了一个布尔数组)