2017-05-25 15 views
-1

https://codepen.io/quanahquan/pen/qmvYEq?editors=1010Ifステートメントのシーケンスは

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を置く場合。長さ===最大IF文を秒単位で指定すると、48個の数値がランダムに選択される前にトリガされるなどの望ましくない結果になります

resultArray.length === max IF文を最初に置くと、アラートの前にすべての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)、あなたのコードでminを差し引くのを忘れた
  • コードでは、2番目のifは、最初のもので何が起こっても実行されます。したがって、すでに配列内に見つかっている場合でも、resultArrayに値が追加されます。
0

最小最大の2つの入力があります。配列リストも作成します - resultArray。あなたが幸運な数字を選ぶときはいつも、その数字がそのリストに入っているかどうかをチェックします。初めはの場合はと入力してください。何も入力されていないか、同じ番号を取得する機会が非常に少ないためです。実際には、最初にが必要ではありません。ステートメントの場合は、onclickイベントコールの処理が行われるためです。

第2のの場合、ステートメントは長さが最大値と等しいかどうかをチェックします。そうであれば、あなたは幸運な数字を選び、毎回警告を発することはできません。