qq_0_39
2017-08-22 22:23:15
function?getRandRow(){
var?arr=[];
for(var?i=0;i<28;i++){
arr[i]=i;
}
var?len=28;
var?r=0;
for(var?i=0;i<20;i++){
r=Math.floor(Math.random()*len);//隨機索引
arr[len-1]=arr[len-1]+arr[r];?//隨機索引與最大索引交換
arr[r]=arr[len-1]-arr[r];?
arr[len-1]=arr[len-1]-arr[r];
len--;?//最大索引自減
}
return?arr;
}
console.log(getRandRow());運行結(jié)果: 為什么會出現(xiàn)這么多的0 ????我的需求是 0-27 隨機取出19個不重復(fù)的數(shù) , 但是這段代碼為什么會出現(xiàn)BUG??? 我快瘋了
1 回答
已采納

信者得救
TA貢獻(xiàn)22條經(jīng)驗 獲得超10個贊
錯誤的地方在于一種情況。就是len-1剛好等于r時。例如len-1=27,r剛好又是27時
????????????arr[len-1]=arr[len-1]+arr[r]; //arr[27]=arr[27]+arr[27]
????????????arr[r]=arr[len-1]-arr[r]; //arr[27]=arr[27]-arr[27],此時就會等于0了。
????????????arr[len-1]=arr[len-1]-arr[r];//arr[27]=arr[27]-arr[27]
解決辦法:聲明一個變量作為介質(zhì)來傳參。
??????????? var abc=arr[r];
????????????arr[r]=arr[len-1];
????????????arr[len-1]=abc;
添加回答
舉報
0/150
提交
取消