Java 用随机数填充二维数组,但确保一行中没有重复的数字
我试图用从1到max的随机数填充一个2D数组,但这样做的方式是,没有一行包含多个值,并且每行的值都是从最低到最高排序的。例如:Java 用随机数填充二维数组,但确保一行中没有重复的数字,java,arrays,multidimensional-array,random,Java,Arrays,Multidimensional Array,Random,我试图用从1到max的随机数填充一个2D数组,但这样做的方式是,没有一行包含多个值,并且每行的值都是从最低到最高排序的。例如: 1 3 5 6 2 4 6 7 2 2 5 9 前两行可以,但第三行包含重复的值。如何确保这不会发生?任何帮助都将不胜感激:)。到目前为止,我得出的结论是: int[][] array = new int[s][c]; for (int rows = 0; rows < array.length; rows++) { for (in
1 3 5 6
2 4 6 7
2 2 5 9
前两行可以,但第三行包含重复的值。如何确保这不会发生?任何帮助都将不胜感激:)。到目前为止,我得出的结论是:
int[][] array = new int[s][c];
for (int rows = 0; rows < array.length; rows++) {
for (int cols = 0; cols < array[rows].length; cols++) {
array[rows][cols] = (rand.nextInt(max)+1);
System.out.print(array[rows][cols]);
}
System.out.println();
int[][]数组=新的int[s][c];
for(int rows=0;rows
同样,我希望每一行中的元素从最低到最高排序,我不知道如何做到这一点!您应该将生成的行值存储在
arraylist
中,然后检查新值是否在arraylist
中
int[][] array = new int[3][4];
ArrayList<Integer> row = new ArrayList<>(); //represent a row
for (int rows = 0; rows < array.length; rows++) {
for (int cols = 0; cols < array[rows].length; cols++) {
int randomNumber = rand.nextInt(max)+1; //random number
//checking if the generated value is in the row
//otherwise keep on generating new value.
while(!row.contains(randomNumber)){
randomNumber = rand.nextInt(max)+1;
}
array[rows][cols] = (randomNumber);
//end of an row we should clear the previous row.
row.clear();
}
Arrays.sort(array[rows]);
}
int[][]数组=新的int[3][4];
ArrayList row=新ArrayList();//表示一行
for(int rows=0;rows
将值添加到数组之前,请检查该值是否已存在:
int prevNum = 0;
while(true) {
int num = (rand.nextInt(max) + 1);
if(!(Arrays.asList(array).contains(num)) && num > prevNum && num < max - 4) {
array[rows][cols] = num;
prevNum = num;
break;
}
}
intprevnum=0;
while(true){
int num=(rand.nextInt(max)+1);
如果(!(Arrays.asList(array.contains)(num))&&num>prevNum&&num
while
循环将继续运行,直到num
不在数组中,它大于上一个数字,并且至少比max
少4个(因为第二个数组中有多少个值,我们不希望在第一次尝试时得到max),这时它将中断(在
循环时终止。最好将此问题拆分。生成一组唯一的随机数,然后在生成后对每行进行排序
要生成一组唯一的随机数,您可以使用两种方法中的任意一种,要么继续生成数字并对照已生成的数字检查每一个数字,要么创建一组随机抽取的值,并在抽取时从该集合中移除值。哪种方法最简单取决于抽取的可能值的数量他是从哪里来的
e、 g.您可以制作一个数组:
int[] choices = {0,1,2,3,4,5,6,7,8,9};
然后从0-9随机掷骰,给出你的数字。无论你选择哪一个,将9换到该插槽中。例如,如果你掷“4”,数组将变为
int[] choices = {0,1,2,3,9,5,6,7,8,-};
然后滚动0-8,并在8位置与移除的任何对象交换。根据需要对任意多个数字重复此操作。显然,这仅适用于选择数量相当小的情况。如果选择数量较大(例如32位数字),则只需随机滚动并对照所有先前创建的数字进行检查
生成每一个数字后,在该行中进行排序插入。我希望数字在每一行中按从低到高的顺序排列,并且每一行都是唯一的。可能的重复项不能解决这个问题!如果您第一次滚动最大数字,这将有问题。@JasonLang是这样的。我已经修复了它。谢谢。您不知道什么想一想调用array.sort(array[row])
在col
-for循环之后?