如何使用另一个数组的值填充[x]%的2d数组

时间:2016-02-07 23:20:07

标签: java arrays

我有两个二维数组,一个是填充的,一个是要填充的,两个都是相同的大小(n x m)。我需要用与第一个数组完全相同的值填充我的第二个数组的[some random]%。 所以,让我们说

int[][] arr1 = new int[][] {{0, 1, 0, 1},
                            {1, 0, 1, 0},
                            {0, 0, 1, 1},
                            {1, 1, 0, 0}};

我希望arr2在同一位置填充25%的arr1值,其他位置保持为空。

int[][] arr2 = new int[4][4];
// where arr2 = something like {{0,1,0,1},
//                              { , , , },
//                              { , , , },
//                              { , , , }}

最终,程序会调用用户填写缺失的值,我可以这样做,只是出于某种原因,这部分似乎不想为我工作。 这是一个学校作业,老师在回答问题方面不是很有帮助。

这是我的代码: 注意到(变量名称是法语..)

  1. nbCases = 2d数组中的元素总数
  2. nbARemplir =第二个数组中分配给它们的值的元素数(基于nbCases * nbPourc,其中nbPourc是要分配的第二个数组的百分比值)
  3. grille [] [] =原始数组
  4. gui =第二个“数组”(它实际上是一个JBdton的二维数组,老师写了....ntntax来添加一个值:gui.setValeur(i,j,value))

    int nbCases = grille.length * grille[0].length;
    int nbARemplir = (int)(nbCases * nbPourc);
    
    do{
        for(int i = 0; i < grille.length; i++) {
            for(int j = 0; j < grille[i].length; j++) {
                if(rand.nextInt(2) == 1 && nbARemplir > 0) {
                    gui.setValeur(i, j, "" + grille[i][j]);
                    nbARemplir--;
                }
            }
        }       
    } while(nbARemplir > 0);
    
  5. 感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

由于您随机选择设置值,您可能会多次遍历2D阵列(由于 while-loop )。因此,您可能会多次在同一个(i,j)索引处设置一个值,但您仍在递减 nbARemplir

现在,我不知道 gui 的类型,但您可以将if语句更改为

if(gui[i][j] != null && rand.nextInt(2) == 1 && nbARemplir > 0)...

这可以确保您不会两次放入相同的值/对象。