2017-05-25 19 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事件呼叫做。

第二個如果語句檢查長度是否等於最大值。如果是這樣,那麼你就不能選擇更多的幸運數字並且每次都會獲得警戒。