这是我的代码的一部分。我想首先将随机数分配给矩阵群[] [],然后将随机数与特定数量的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
答案 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
的数组,您的索引范围从0
到k-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
的单个数组(这些是k
和j
的初始值),那么您需要声明这个这两个嵌套循环的外部。也许甚至在第三个循环之外,因为我甚至不确定循环是做什么的。
在anaxin's answer进行循环,了解如何有效地将0和1分配给您的种群数组。 (将randP
设置为0.5
,您将有50%的机会出现。)