1

我的程序中有一个非常简单的部分有问题......数组'population'中的元素也是一个数组..每个'temp'数组有28个随机数被加载到数组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();
4

2 回答 2

1

您需要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数组中只会对temp数组进行引用,因此当您temp一遍又一遍地使用相同的数组时,最终会在temp数组的每个索引处引用相同的population数组。相反,如果您temp在内部循环中创建一个新数组,那么数组中的每个population数组都会不同。


仅供参考,我还对您的代码进行了一些其他更正以正确声明变量tempi并将j其作为局部变量,因此它们不是隐式全局变量。

于 2013-01-21T07:16:54.690 回答
0

这是因为它是同一个数组。您创建它,temp = []然后将其分配给每个population[i]for i=0..9

于 2013-01-21T07:17:09.503 回答