亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

幫我解決一下

使用random()隨機取得0-10之間的數值。使用round()對數值進行四舍五入。 如果我想抽隨機10個數,但又不重復怎么搞?

正在回答

3 回答

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>JS隨機數</title>

<style type="text/css">

h1{text-align: center;}

p{ text-align: center; font-size: 36px;}

</style>

</head>


<body>

<h1>JS隨機數</h1><hr />

<p id="conA"></p>

<p id="conB"></p>

</body>

<script type="text/javascript">


setTimeout(function(){ window.location.reload();},1000);//每隔1秒刷新1次頁面

//Math.round() 把一個數字舍入為最接近的整數。

//math.random()取得某個范圍內的隨機數

var Array = [] || new Array();

var mupiao;

Array[0] = Math.round((Math.random()) * 10); //輸出的值的范圍 ?

for(var i = 1; i < 10; i++) ?//輸出的個數(這里是10個數)

{

mupiao = Math.round((Math.random()) * 10);

for(var a = 0; a < Array.length; a++)?

{

while(Array[a] == mupiao)?

{

mupiao = Math.round((Math.random()) * 10);

}

}

Array[a] = mupiao;

}

//用js對象的特性,如何去重復:

//第一步:把數組轉成一個js對象。

//第二步:把數組中的值,變成js對象中的 key。

//第三步:把這個對象 再還原成數組。


//該方法把 組數 轉為 對象

var toObject = function(arr)

{

var obj = {} //創建一個私有(在函數中)的對象

for(var i = 0; i < arr.length; i++)

{

obj[arr[i]] = true; //這樣就把數組轉為對象了(就是把循環出來的數組 放到 對象中)

}

return obj;

}

//該方法把 對象 轉為 數組

var keys = function(obj)

{

var arr = []; //創建一個私有(在函數中)的數組

for(var i in obj)

{

if(obj.hasOwnProperty(i)) //判斷這個屬性是否屬于obj的,注hasOwnProperty是js對象中的方法

{

arr.push(i);//把循環出來的對象追加到數組中

}

}

return arr;

}

//合并方法,去除數組中的重復項

var uniq = function(arrs)

{

return keys(toObject(arrs));//把數arrs放到toObject方法中,然后在把toObject方法入到keys方法中并返回,就OK了。

}


document.getElementById('conA').innerHTML = Array;//這是原來的隨機數組

document.getElementById('conB').innerHTML = uniq(Array); //這是去重復后的隨機數組

</script>


</html>


1 回復 有任何疑惑可以回復我~
#1

qq_禁滅生_03414590 提問者

非常感謝!
2016-08-17 回復 有任何疑惑可以回復我~

用if()語句把取得的隨機數和前面的比較,如果相同則不輸出,并且array.length++

0 回復 有任何疑惑可以回復我~

var array = new Array();

var num;

array[0]=Math.round((Math.random())*100);

for(var i=1;i<10;i++){

num=Math.round((Math.random())*100);

for(var a=0;a<array.length;a++){

? ? ? ? while(array[a]==num) {num=Math.round((Math.random())*100);}

}

array[a]=num;?

}

document.write(array);

91,69,5,82,83,79,93,62,88,7

1 回復 有任何疑惑可以回復我~
#1

無知的狗3576298

我想問一下 這個代碼是不是會出現重復值呀
2016-07-30 回復 有任何疑惑可以回復我~
#2

水里有條魚 回復 無知的狗3576298

不會啊。
2016-07-30 回復 有任何疑惑可以回復我~
#3

無知的狗3576298 回復 水里有條魚

for(var a=0;a<array.length;a++){ while(array[a]==num) {num=Math.round((Math.random())*100);} } 我覺得這里有問題誒 應該會出現重復值。
2016-07-31 回復 有任何疑惑可以回復我~
#4

水里有條魚 回復 無知的狗3576298

...為什么你會這樣想,我代碼目的是num跟數組里每一個數比較,一樣的話重新設定num值,到最后出來的num就跟數組里面的都不一樣。
2016-07-31 回復 有任何疑惑可以回復我~
#5

q_Amily 回復 水里有條魚

會出現重復值,因為 while(array[a]==num) {num=Math.round((Math.random())*100);}如果array[a]==num,那么重新獲取一個隨機數,這個新的隨機數并沒有和a之前的數再次進行比較,只是和a++后面的數進行比較,所以還是有可能出現重復值的,不過,獲得新的隨機值后,讓它從新從a=0開始比較就好了。 while(array[a]==num) {num=Math.round((Math.random())*100);a=0;}
2016-08-03 回復 有任何疑惑可以回復我~
#6

q_Amily 回復 q_Amily

不對,應該是a=-1,因為當執行語句后a++,這樣才能實現再次從a=0開始比較 fwhile(array[a]==num) {num=Math.round((Math.random())*100);a=-1;}
2016-08-03 回復 有任何疑惑可以回復我~
#7

水里有條魚 回復 q_Amily

有道理
2016-08-03 回復 有任何疑惑可以回復我~
查看4條回復

舉報

0/150
提交
取消

幫我解決一下

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號