Java:如何随机初始化用户定义大小的2D数组的顺序?
我正在开发一个程序,其中用户选择一个正方形NxN数组的大小,其中N是他们选择的数字,代表行和列的数量 我的程序背景是制作一个N字谜游戏。因此,无论用户选择什么大小,通过数组空间数-1,值都将是0。例如,如果用户选择3作为大小,这将是一个3x3数组,这意味着数字将有9个空格,数字将是0-8 这是我目前的代码:Java:如何随机初始化用户定义大小的2D数组的顺序?,java,multidimensional-array,Java,Multidimensional Array,我正在开发一个程序,其中用户选择一个正方形NxN数组的大小,其中N是他们选择的数字,代表行和列的数量 我的程序背景是制作一个N字谜游戏。因此,无论用户选择什么大小,通过数组空间数-1,值都将是0。例如,如果用户选择3作为大小,这将是一个3x3数组,这意味着数字将有9个空格,数字将是0-8 这是我目前的代码: public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
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算法 实际上数组的维数根本不重要 随机初始化的一种简单方法是:
这可能是您的方式,除非每个数字只允许出现一次:
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[][]拼图=新的int[n][n];
随机=新随机();
对于(int x=0;x
编辑:
我想我现在明白你的问题了。这将有助于您:
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;
}
public int[][]initRandomArray(int n){
int[][]拼图=新的int[n][n];
ArrayList编号=新的ArrayList();
对于(int i=0;i
您可以使用嵌套for循环在数组中进行迭代,在通过Java提供的随机类进行迭代时分配数组的每个值。如果数组中不能有重复的数字,则可能需要检查该数字是否已被使用
Random rnd = new Random();
//inside nested for loop
while (value has already been picked){
// gives a random value btwen 0 and (n*n)-1
value = rnd.nextInt((n*n));
}
// value has not been used
puzzle [i][j]= value;
有很多方法可以检查是否使用了某个值(当我有这样一个项目时,我使用了一个布尔数组)我的意思是你的数组创建得很好,现在创建一个循环来随机填充它?所以基本上当你说
时,我们不允许使用任何外部算法,如Fisher-Yates Shuffle算法
,您必须编写自己的随机生成器,对吗?此解决方案仅在值为连续数字时有效。我不确定我们是否可以假设这一点,参见原始问题的最后第二段。此外,如果n变大,可能需要生成大量随机数,直到得到一个未使用的随机数。