首页 新闻 会员 周边

js生成不重复随机数遇到的疑问?

0
悬赏园豆:10 [已解决问题] 解决于 2017-01-23 09:56
复制代码
var array=new Array(); 
            // 循环N次生成随机数 
            for(var i = 0 ; ; i++){  
                if(array.length<9){ 
                generateRandom(9); 
                }else{ 
                  break; 
               } 
            } 
            // 生成随机数的方法 
            function generateRandom(count){ 
                 var rand = parseInt(Math.random()*count);
                 console.log(array); 
                 for(var i = 0 ; i < array.length; i++){ 
                      if(array[i] == rand){ 
                           return false; 
                      }      
                 } 
                 array.push(rand); 
            }
            var resultaa='';
            // 循环遍历随机数数组 
            for(var i = 0 ; i < array.length; i++){ 
                resultaa+='获得'+array[i]+'等奖'+'\n'; 
            } 
            alert(resultaa);
复制代码

上述代码中,本意是想生成9个不重复的随机数,但是调用函数generateRandom(9),中

parseInt(Math.random()*count)表示的意思是parseInt(Math.random()*9),这样生成的不就是0~9,也就是有可能出现10这个随机数了吗?

小猪冒泡的主页 小猪冒泡 | 初学一级 | 园豆:187
提问于:2017-01-22 18:07
< >
分享
最佳答案
0

parseInt(Math.random() * count)

這句是產生9以下的隨機數,你會錯意了

決定數量的是第一個for迴圈

收获园豆:10
RosonJ | 老鸟四级 |园豆:4910 | 2017-01-23 09:06

你好,首先感谢您的解答,可能我描述的不清楚,我的疑问是,我想要随机生成不重复的0~8数字,这里的generateRandom(9);不就是会出现该随机数是9的情况吗?但是经过多次实现不会出现9呀。。。理论上感觉应该调用的是generateRandom(8);但经过试验发现反而会出现9。。。

小猪冒泡 | 园豆:187 (初学一级) | 2017-01-23 09:26

@小猪冒泡: 

Math.random()會產生小於1的隨機數

任何小於1的隨機數乘以9都會小於9

parseInt效果等同於無條件捨去取整數

對小於9的任意數無條件捨去取整,得小於9的整數

RosonJ | 园豆:4910 (老鸟四级) | 2017-01-23 09:30

@RosonJ: 嗯嗯 非常感谢您的解答 我一直认为Math.random()是生成[0,1]的随机数,原来是生成[0,1)不包括1,谢谢您的帮助!

小猪冒泡 | 园豆:187 (初学一级) | 2017-01-23 09:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册