我想用随机数成生一个有7个数字的数组,这些数字每个都不一样,且都少于7,也就是说0123456随机排列,是用JAVASCRIPT写的,请高手们教导一下。

解决方案 »

  1.   

    先随机生成7以内的数字,再判断数组中是否存在,不存在就push进去,否则继续随机生成,知道push进去7个
      

  2.   

    function init(){
    var m="";
    var count=0;
    var a=[0,1,2,3,4,5,6];
    for(var i=0;i>-1;i++){
    var x=parseInt(Math.random()*7);
    if(a[x]==-1){
    continue;
    }else{
    m+=a[x];
    a[x]=-1;
    }
    for(var k=0;k<a.length;k++){
    if(a[k]==-1){
    count+=1;
    if(count==28){
    alert(m);
    return;
    }
    }
    }
    }
    }
    window.onload=init;
    这样试试
      

  3.   

    大体思路是随机一个0到6的数 其中每个数对应数组的一个元素,被随机到的数所对应的数组元素则设为-1,这样的一直随机这个数  直到数组的元素都为-1为止  每次随机都判断数组中有几个元素为-1,因为随机的是7个数 所以在满足条件后会判断7次,所以counte 的最后数字应该是1+2+3+4+5+6+7=28 此时满足七个数字每个数字都不同   大体是这个意思  但效率可能会很低  呵呵
      

  4.   

    其实,思路还是很重要的。alert([0,1,2,3,4,5,6].sort(function(){return Math.random()>0.5}))
      

  5.   


    就是要那样“生成”,也不必如此麻烦:<script>
    var arr = [], hsh = {};
    while (arr.length < 7) {
        var num = Math.random() * 7 >>> 0;
        hsh[num] || (hsh[num] = 1) && arr.push(num);
    }
    alert(arr)
    </script>
      

  6.   

    var arr = [0,1,2,3,4,5,6];
    for(var i = 0; i < 7; i++){
    arr.sort(function(){
    return Math.random() - 0.5;
    });
    }
        alert(arr);
      

  7.   

    var arr = [], hsh = {};
    while (arr.length < 7) {
        var num = Math.random() * 7 >>> 0;
        hsh[num] || (hsh[num] = 1) && arr.push(num);
    }
    alert(arr)
    正解
      

  8.   

    其实严格点说这个方法不太符合要求,毕竟机率不均等。下面这个就差不多了 var arr = [0,1,2,3,4,5,6],
    ret = [];
    while(arr.length !== 0){
    var rand = Math.floor(Math.random() * arr.length);
    ret.push(arr.splice(rand, 1));
    }
    alert(ret);