ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 如何制作一个没有重复的随机数组?

2019-10-02 19:34:12  阅读:175  来源: 互联网

标签:javascript repeat random spinner


我一直在寻找这个问题的一些答案,但是当我试图找到解决方案时似乎没有任何效果.

我想要实现的是在Javascript&中创建一个微调器. Adobe Edge随机旋转一个数字,并且在所有数字都被旋转之前不再重复该数字.

我知道对于一个体面的程序员来说这应该是相当容易的,但我还不是那么有经验.

这是我到目前为止所做的,但它是未完成的和错误的:

var myArray = ['360', '330', '300', '270', '240', '210', '180', '150', '120', '90', '60', '30'];
var Spinner1 = sym.$('Spinner1');

Spinner1.click(function(){
// randomize the degree of spin.
var mySpin = myArray[Math.floor(Math.random() * myArray.length)];

sym.getSymbol('Spinner1').play();
        Spinner1.css({
                    '-webkit-transform': 'rotate(' + mySpin + 'deg)',
                    '-moz-transform': 'rotate(' + mySpin + 'deg)',
                    '-ms-transform': 'rotate(' + mySpin + 'deg)',
                    '-o-transform': 'rotate(' + mySpin + 'deg)',
                    'transform': 'rotate(' + mySpin + 'deg)',
   });
   Spinner1.css('-webkit-transition','all 500ms cubic-bezier(0.420, 0.000, 1.000, 1.000)');

   if (mySpin > 300 && mySpin < 360) {
   alert("Winner is number 1!");
   }
});

希望有人可以帮助我.提前致谢.

解决方法:

有两种方法可以实现这一目标.

>存储已旋转的值数组.然后,当您生成一个新数字时,检查它是否在旋转数字数组中.如果是,则生成一个新数字并再次检查,直到得到一个不在数组中的数字.否则,将其添加到阵列.
>正如您所做的那样,预先生成所有有效数字的数组.然后,每次旋转数字时,将其从该数组中删除.这样,下次你“旋转”时,你将只选择尚未旋转的值.
>预先生成所有有效数字的数组,然后随机排序.然后,您所要做的就是继续获取​​数组中的第一项.

顺便提一下,选项3是最优雅的,但它有一个缺点,即打开控制台的人可能会看到下一个确切的数字!选项2是次佳的,如果允许用户知道某个号码不能出现两次,他们就不能通过查看剩余的可用号码来“欺骗”.选项1效率最低 – 因为这意味着您的代码需要做越来越多的工作来尝试找到“免费”号码.

老实说,如果你的游戏需要完全不受黑客攻击,那么无论如何你都不想生成任何随机数的客户端,所以如果这只是为了一点乐趣,你使用哪种方法并不重要.如果你是为赌博网站写的,首先让我知道哪一个我可以发财,然后将你的逻辑移到服务器上.

所以这是选项2方法的一个例子

<!DOCTYPE html>
<html>
<head>
    <script>

        var numbers = []; // this array will store the available numbers..

        function generateNumbers()
        {
            // populate the available numbers however you need to..
            for(var i=0; i<360; i+=30)
            {
                numbers.push(i);
            }
        }

        function spin()
        {
            if(numbers.length==0)
            {
                // then we've used  up all available numbers..start new game or whatever you need to do..
                alert("starting again");
                generateNumbers();
            }
            var rand = Math.floor(Math.random()*numbers.length); // select an index randomly based on the number of remaining available numbers..
            var num = numbers[rand];
            numbers.splice(rand,1); // remove the number we selected so it can't be selected next time..
            document.getElementById("number").innerHTML = num;
        }

    </script>
</head>
<body>
<button onclick="spin()">SPIN</button>
<div id="number"></div>
</body>
</html>

以及选项3.下面.主要区别在于您只需移动()下一个值而不必随意选择.

<!DOCTYPE html>
<html>
<head>
    <script>

        var numbers = [];

        function generateNumbers()
        {
            for(var i=0; i<360; i+=30)
            {
                numbers.push(i);
            }
            function sort(a,b)
            {
                return (Math.random()>0.5)? -1 : 1;
            }
            numbers.sort(sort);
        }

        function spin()
        {
            if(numbers.length==0)
            {
                alert("starting again");
                generateNumbers();
            }
            var num = numbers.shift();
            document.getElementById("available").innerHTML = "Available:" + numbers.join(",");
            document.getElementById("number").innerHTML = "Selected:" + num;
        }

    </script>
</head>
<body>
<button onclick="spin()">SPIN</button>
<div id="available"></div>
<div id="number"></div>
</body>
</html>

希望这能让您了解如何将其合并到您的代码中.

标签:javascript,repeat,random,spinner
来源: https://codeday.me/bug/20191002/1843965.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有