【问题标题】:Java Matrix how to assign int 1 or 0 to a 2D array? [duplicate]Java Matrix如何将int 1或0分配给二维数组? [复制]
【发布时间】:2016-01-28 19:02:12
【问题描述】:

这是我的代码的一部分。我想先将随机数分配给矩阵population[][],然后将随机数与特定数字ranP进行比较,如果population[][]

arrayindexoutofboundsexception 0

在这个问题上需要帮助。谢谢!

            randGen = new Random();
            double randNum = randGen.nextDouble();

            for ( int i = 0; i < 11; i++){
                for (int k = 0; k < inipopulationsize; k++){
                    for (int j = 0; j < 25; j++){



                        ranP = 0.5;
                        //TMaxtrix[i][j] = matrix[i][j];
                        System.out.println(matrix[i][j] + " ");
                        population = new double[k][j];
                        System.out.println("randNum: " + randNum);
                        population[k][j] = randNum;
                        if (randNum <= ranP){
                            population[k][j] = 1;
                        }
                        else
                            population[k][j] = 0;
                        System.out.println("population: " + population[k][j]);

                    }//j loop


                }//k loop

            }//i loop

我是自学的,不参加任何课程。如果这真的让你“专家”感到困扰,那你为什么不忽略并节省时间回家看电影或花更多时间与家人在一起呢?感谢这里好人的帮助。但对你只知道讽刺的人感到羞耻。这是最终的工作:

            randGen = new Random();
            population = new int[inipopulationsize][25];

            for ( int i = 0; i < population.length; i++){

                    for (int j = 0; j < population[i].length; j++){
                        double randNum = randGen.nextDouble();
                        ranP = 0.5;
                        if (i < 11){
                        //System.out.println(matrix[i][j] + " ");
                        }

                        if (randNum <= ranP){
                            population[i][j] = 1;
                        }
                        else
                            population[i][j] = 0;
                    //System.out.println("population index: " + i + " Dieasease index: " + j + " DI on (1) or off (0): " + population[i][j] + "");

                    }//j loop


            }//i loop

【问题讨论】:

  • 必须阅读How to Ask
  • 请更新您的代码以显示您如何实例化变量填充和矩阵
  • 目前还不清楚您要在这里做什么。请编辑您的问题以清楚地解释您的最终目标是什么。它是具有随机分布的 1 和 0 的二维数组还是此类数组的矩阵?有点难说。

标签: java arrays indexing


【解决方案1】:

第三个循环是因为你想要二维数组吗?如果是这样,您可能应该查看 ArrayLists of 2d 数组。

        int inipopulationsize = 25;
        double[][] population;
        Random randGen = new Random();
        double randNum = randGen.nextDouble();
        double ranP = 0.5;// outside loops
        population = new double[inipopulationsize][25]; // out


            for (int k = 0; k < inipopulationsize; k++){
                for (int j = 0; j < 25; j++){

                    randNum = randGen.nextDouble();//i assume you want new random every time

                    if (randNum <= ranP){
                        population[k][j] = 1;
                    }
                    else
                        population[k][j] = 0;
                }//j loop
            }//k loop
System.out.println(Arrays.deepToString(population));

【讨论】:

    【解决方案2】:

    我看不出有 3 个循环和 2d 数组的理由。

    Random randGen = new Random(); 
    double randNum;
    for(int i=0; i<population.length; i++){
        for(int j=0; j<population[i].length; j++){
            randNum = ranGen.nextDouble();
            if(randNum<0.5) population[i][j] = 0;
            else population[i][j] = 1.0;
        }//j loop
    }//i loop
    

    【讨论】:

      【解决方案3】:

      您的问题是您指的是 二维数组边界之外的项目。

      让我们看一下您的代码。这一行:population = new double[k][j]; 声明了一个大小为kxj 的新二维数组。然后在这一行:population[k][j] = randNum; 您尝试引用同一二维数组的第 k 列和第 j 行中的项目。 这在 Java 数组中是不合法的。

      Java 数组是 0 索引的,这意味着对于大小为 k 的数组,您的索引范围从 0k-1。索引 k 处没有项目。这就是您收到索引越界错误的原因。

      Please look at this link instructing you on the basic use of Java Arrays.

      出现确切的错误arrayindexoutofboundsexception 0 是因为在您的第一次迭代中,您创建了一个大小为 0 乘 0 的人口。然后您尝试访问第 0 列和第 0 行中的项目,即第一个项目。但是,由于您的人口数组的大小为 0,它没有空间,甚至索引 0 也超出了范围。


      但是,我什至不确定这是您想要做的。

      您在循环的每次迭代 上声明一个二维数组。如果您要做的只是创建一个大小为inipopulationsizeby25 的数组(这些是kj 的初始值),那么您需要在外部声明这个这两个嵌套循环。甚至可能在第三个循环之外,因为我什至不确定那个循环在做什么。

      anaxin's answer 循环,了解如何有效地将 0 和 1 随机分配给您的总体数组。 (将randP 设置为0.5,您将给予每个人50% 的机会。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        • 2019-03-29
        • 1970-01-01
        • 2017-09-30
        • 2012-01-07
        • 1970-01-01
        相关资源
        最近更新 更多