1

ここに私のプログラムの非常に単純な部分があり、問題があります... 配列「母集団」の要素も配列です..配列母集団にロードされている「一時」配列ごとに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同じ配列への参照が発生します。代わりに、内側のループで新しい配列を作成すると、配列内の各配列が異なります。temppopulationtemppopulation


参考までに、変数を適切に宣言するためにコードにいくつかの修正を加え、tempローカル変数として暗黙のグローバル変数にならないようにしました。ij

于 2013-01-21T07:16:54.690 に答える
0

これは、同じ配列であるためです。で作成し、i=0..9temp = []のそれぞれに割り当てます。population[i]

于 2013-01-21T07:17:09.503 に答える