Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用随机数填充二维数组,但确保一行中没有重复的数字_Java_Arrays_Multidimensional Array_Random - Fatal编程技术网

Java 用随机数填充二维数组,但确保一行中没有重复的数字

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到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 (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循环之后?