Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 如何用int=1随机填充10%二维数组?_Java_Arrays - Fatal编程技术网

Java 如何用int=1随机填充10%二维数组?

Java 如何用int=1随机填充10%二维数组?,java,arrays,Java,Arrays,我有一个小问题,我开始学习java。 我需要创建二维数组,我需要用10%的整数填充这个数组,当然我的代码需要随机填充这个数组 需要一些关于如何填写10%的提示吗 public static void main(String[] args) { int maxX = 10; int maxY = 10; int[][] Arr = new int[maxX][maxY]; Random r = new Random(); // random ints

我有一个小问题,我开始学习java。 我需要创建二维数组,我需要用10%的整数填充这个数组,当然我的代码需要随机填充这个数组

需要一些关于如何填写10%的提示吗

 public static void main(String[] args) {

    int maxX = 10;
    int maxY = 10;
    int[][] Arr = new int[maxX][maxY];
    Random r = new Random();
    // random ints
    for (int x = 0; x < maxX; x++) {
        for (int y = 0; y < maxY; y++) {
            Arr[x][y] = r.nextInt(2);
        }
    }


    // printing Arr
    for (int i = 0; i < Arr.length; i++) {
        for (int j = 0; j < Arr[i].length; j++) {
            System.out.print(Arr[i][j] + " ");
        }
        System.out.println();
    }
}

您可以采取以下步骤:

假设您需要填充一个N*N数组

创建一个列表并添加到其中N*N/10 1s和N*N*9/10 0s。list.addAllCollections.nCopiescount,1或0可以在此处帮助您

在该列表上运行Collections.shuffle以获得随机顺序

迭代列表中的元素。前N个元素将成为2D数组的第一行,下N个元素将成为数组的第二行,依此类推


洗牌的另一种选择是选择10%xn个随机位置,如果0在该位置,则选择1,否则选择另一个位置。在伪代码中:

int[][] array = new int[N][N]
apply N * N / 10 times {
  index = random(0 .. N * N)
  if array(index) = 0 then array(index) = 1
  else retry with another index
}


您需要将索引从0到N*N转换为2D数组中的一对i,j。

我将使用double random=Math.random;
然后一个if来检查变量random是否小于或等于0.1

创建数组,随机取一行和一列,在不超过百分比的情况下,检查位置是否为0,如果为是,则用1填充

    int[][] array = new int[N][N];
    int percentage = N*N/10;
    int filled = 0;
    while(filled <= percentage)
    {
        Random rand = new Random();
        int i = rand.nextInt(N+1);
        int j = rand.nextInt(N+1);
        if(array[i][j] == 0)
        {
            filled++;
            array[i][j] = 1;
        }
    }
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            System.out.print(array[i][j] + " ");
        }
        System.out.println();
    }

欢迎来到堆栈溢出。你能更详细地描述一下你到目前为止采取了哪些步骤,以及问题的具体所在吗?您可以编辑问题并提供代码。