我正在开发一个程序,用户选择方形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算法。
答案 0 :(得分:0)
实际上阵列的尺寸根本不重要。
随机初始化的一种简单方法是:
答案 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
有很多方法可以检查是否已经使用了一个值(当我有这样的项目时,我使用了一个布尔数组)