Java Matrix如何将int 1或0分配给2D数组?

时间:2016-01-28 19:02:12

标签: java arrays indexing

这是我的代码的一部分。我想首先将随机数分配给矩阵群[] [],然后将随机数与特定数量的ranP进行比较,如果population [] []< ranP,然后将population [] []重新分配给1,否则为0.但它显示

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

3 个答案:

答案 0 :(得分:1)

我没有看到有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

答案 1 :(得分:1)

第三个循环是因为你想要我的2D阵列吗?如果是这样,您应该查看二维数组的ArrayLists。

        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 :(得分:1)

您的问题是您指的是之外的项目 2D阵列的范围。

让我们来看看你的代码。这一行:population = new double[k][j];声明了一个大小为k x j的新2D数组。然后在这一行:population[k][j] = randNum;你试图引用同一个2D数组的第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也超出范围。

但是,我甚至不确定这是你想要做的事情。

您在循环的每次迭代上声明一个2D数组。如果您要做的只是按inipopulationsize制作一个大小为25的单个数组(这些是kj的初始值),那么您需要声明这个这两个嵌套循环的外部。也许甚至在第三个循环之外,因为我甚至不确定循环是做什么的。

anaxin's answer进行循环,了解如何有效地将0和1分配给您的种群数组。 (将randP设置为0.5,您将有50%的机会出现。)