[英]Fill a 2D array with random numbers but making sure no number is repeated in a row
我正在尝试用从1到最大的随机数填充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 (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 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;
}
}
while
循环将继续进行,直到num
尚未在数组中,它大于前一个数字,并且比max
至少小4(因为第二个数组中有多少个值,我们不希望第一次尝试时的最大值),它何时会break
(终止while
循环)。
您应该将生成的行值存储在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[] 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位数字),则随机滚动并对照所有先前创建的数字进行检查。
生成每个数字后,在该行中进行排序插入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.