我有一些奇怪的錯誤,我無法理解它來自哪裏。我在Google Script環境中將它寫入js。在javascript中從pdf中選擇一個隨機變量
function tester() {
var pdf = [[0,5],[1,5],[2,40],[3,50]]; // some pdf as a 2d array
var tuple = [0,0,0,0]; //the resulting pdf from the test
var rand = 0;
for (var i = 0; i<100; i++){ //100 times initialize a random variable and then catch the result into the tuple
rand = getRandomN(pdf);
if (rand==0){tuple[0]+=1} //if the outcome==0 then add 1 to the first element of the tuple
else if (rand==1){tuple[1]+=1}
else if (rand==2){tuple[2]+=1}
else if (rand==3){tuple[3]+=1}
}
Logger.log(tuple);
}
getRandomN(pdf)
返回根據PDF
問題的一個結果是,元組始終返回1全零的一些地方。它看起來像隨機發生器工作得很好,但循環只經過一次。 有沒有人有提示?
UPDATE:
function getRandomN(pdf) {
var result = 0;
var rand = getRandomInt(0,10000)/100;
for (var i=1; i<pdf.length; i++){
pdf[i][1] = pdf[i][1] + pdf[i-1][1];
}
if (pdf[pdf.length-1][1] != 100){return undefined}
//Logger.log(rand);
for (var i=0; i<pdf.length; i++){
if (rand<=pdf[i][1]){result=pdf[i][0]; break}
}
Logger.log(pdf);
return result;
}
而且從Mozilla的
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
其中getRandomN如果可能的話也顯示這部分。 – 2015-01-15 15:20:05
我會立即添加它。這只是它工作得很好,如果我簡單地測試它沒有循環,但循環有點跳過。 – AVX 2015-01-15 15:23:33
你的循環對我來說看起來很好......你寫了getRandomN()嗎?我們可以看到那個代碼嗎?另外,如果你知道getRandomN()只會返回與你的元組索引相匹配的值,你可以用一行代替整個循環的內部: 'tuple [getRandomN(pdf)] + = 1; ' – 2015-01-15 15:25:55