为了账号安全,请及时绑定邮箱和手机立即绑定

帮我解决一下

使用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下载
官方微信