我的程序中有一个非常简单的部分,它有问题...... 数组'population'中的元素也是一个数组..有28个随机数,每个'temp'数组被加载到数组中。我的问题是数组'population'以某种方式保存了所有相同的数组,就像它覆盖每个循环一样。我花了这么多时间在这个非常简单的问题上,这是一种什么样的错误?评论的“警报”用于检查人口的元素0和1。并且它以某种方式真正覆盖每个循环,因此填充数组中的每个临时元素都是相同的。请帮帮我..
var population[];
function init_population(){
temp = [];
//Math.floor(Math.random()*8);
for(i=0;i<10;i++){
for(j=0;j<28;j++)
temp[j] = Math.floor(Math.random()*8);
population[i]= temp;
//alert("population[0] = " +population[0] +" and population[1] = " +population[1]);
}
}
init_population();
答案 0 :(得分:0)
您需要在内部循环中创建一个新的temp
数组,这样您就不会一遍又一遍地重复使用相同的数组:
var population = [];
function init_population() {
var temp, i, j;
for(i=0; i<10; i++) {
temp = [];
for(j=0; j<28; j++) {
temp[j] = Math.floor(Math.random()*8);
}
population[i] = temp;
}
}
init_population();
由于将temp
数组分配到population
数组只会在{1}}数组中引用,当您一遍又一遍地使用相同的temp
数组时,您最终会在temp
数组的每个索引处引用相同的temp
数组。相反,如果在内部循环中创建一个新的population
数组,那么temp
数组中的每个数组都将不同。
仅供参考,我还对您的代码进行了一些其他更正,以正确地将变量population
,temp
和i
声明为局部变量,因此它们不是隐式全局变量。
答案 1 :(得分:0)
这是因为它是相同的数组。
您可以使用temp = []
创建它,然后将其分配给每个population[i]
,以便i = 0..9