2017-05-25 48 views
-1

https://codepen.io/quanahquan/pen/qmvYEq?editors=1010如果语句序列

var resultArray = []; 

function pickRandom(){ 
    var min = parseInt(document.getElementById("min").value); 
    var max = parseInt(document.getElementById("max").value); 
    var result = Math.floor((Math.random() * max) + min); 
    if (resultArray.includes(result)) 
     { 
     pickRandom(); 
     } 
    if (resultArray.length === max) 
     { 
     alert("you ran out of number"); 
     } 
    else 
     { 
     resultArray.push(result); 
     document.getElementById("result").value = result; 
     } 
    } 

嗨,大家好......我不明白这背后

我有2条的IF语句的逻辑,但在这种情况下,如果我把resultArray。如果我把resultArray.length ===最大的IF语句放在第一位,那么它将会选择所有48个数字被随机挑选出来之前触发的不合要求的结果

所有48个号码在提醒之前...

+0

把所有的代码放在问题中,不应该是别的,而是如果不是吗? – epascarello

+0

我刚刚做了,谢谢,但是如果它可能会如何呢? –

回答

1

在我看来,这种算法效率不高。对于大量的人来说,它会花费大量的时间来找出缺失的差距。想象一下max是1,000,000,算法到目前为止产生了999,999个数字。它会继续生成随机数字,直到经理找到丢失的数字,这将花费大量时间。

我更新了您的代码,使其使用递归调用工作。这是为了学习,而不是在实际应用中使用。

var resultArray = []; 

function pickRandom() { 
    // Warning: min and max should't change between calls 
    var min = parseInt(document.getElementById("min").value); 
    var max = parseInt(document.getElementById("max").value); 

    // result is in the interval [min, max] 
    var result = Math.round((Math.random() * (max - min)) + min); 

    // Do we have too many items in resultArray? 
    if (resultArray.length === max - min + 1) 
    { 
     alert("you ran out of number"); 
    } 
    else if (resultArray.includes(result)) 
    { 
     // Already chosen, pick another number 
     // Warning: going recursive is not efficient 
     pickRandom(); 
    } else { 
     // Is a new number. Store it and show it. 
     resultArray.push(result); 
     document.getElementById("result").value = result; 
    } 
    } 

一些你在你的代码有错误:

  • 计算结果是错误的,正确的方法是Math.round((Math.random() * (max - min)) + min)
  • 为当所有的值被用来检测正确的测试:(resultArray.length === max - min + 1),在您的代码中,您忘记了减去分数
  • 在您的代码中,第二个if将执行,而不管第一个中发生了什么。因此,即使它已经在该数组中找到,它也会为resultArray添加一个值。
0

您有两个输入分钟最大。您还可以创建一个数组列表 - resultArray。每当你选择一个幸运号码时,它会检查该号码是否在该列表中。在开始时,它根本不输入第一个,如果是,因为它是空的或获得相同数字的机会非常低。其实你不需要第一个如果声明,因为它做你的onclick事件呼叫做。

第二个如果语句检查长度是否等于最大值。如果是这样,那么你就不能选择更多的幸运数字并且每次都会获得警戒。