繁体   English   中英

用随机数填充2D数组,但要确保连续不重复任何数字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM