2012-11-23 73 views
-1

我寫的JavaScript代碼:隨機數,如果,否則,如果

function rollTrigger() { 
var roll = Math.round(Math.random()*999999999+1); 
var result = document.getElementById("result"); 

if (roll <= 50900000) { 
    result.innerHTML = "Category 0"; 
    BoLPamount += 1; 
    document.getElementById("boxlesserprizes").innerHTML = "Box of Lesser Prizes " + BoLPamount; 
    log.innerHTML += "<br />Trigger - win = true; Category 0"; //LOG   
} else if (roll <= 900000) { 
    result.innerHTML = "Category A"; 
    log.innerHTML += "<br />Trigger - win = true; Category A"; //LOG 
} else if (roll <= 360000) { 
    result.innerHTML = "Category B"; 
    log.innerHTML += "<br />Trigger - win = true; Category B"; //LOG 
} else if (roll <= 211890) { 
    result.innerHTML = "Category C"; 
    log.innerHTML += "<br />Trigger - win = true; Category C"; //LOG 
} else if (roll <= 109020) { 
    result.innerHTML = "Category D"; 
    log.innerHTML += "<br />Trigger - win = true; Category D"; //LOG 
} else if (roll <= 56505) { 
    result.innerHTML = "Category E"; 
    log.innerHTML += "<br />Trigger - win = true; Category E"; //LOG 
} else if (roll <= 34888) { 
    result.innerHTML = "Category F"; 
    log.innerHTML += "<br />Trigger - win = true; Category F"; //LOG 
} else if (roll <= 15574) { 
    result.innerHTML = "Category G"; 
    log.innerHTML += "<br />Trigger - win = true; Category G"; //LOG 
} else { 
    result.innerHTML = "MEH"; 
    log.innerHTML += "<br />Trigger - win = false"; //LOG 
}; 
document.getElementById("roll").innerHTML = roll; 

};

但它不能正常工作...例如,如果隨機數是40200000,那麼它顯示「類別0」應該是,但是即使隨機數是10,它仍然顯示「類別0」而不是「類別G「。任何想法什麼是錯的?

+1

這應該有助於解決這個問題,和類似的,問題:http://en.wikipedia.org/wiki/Debugger – Isaac

+2

就拿'roll'值,說'10',並且在你閱讀它時逐行執行代碼。怎麼了? –

回答

5

if (roll <= 50900000)
井10小於50900000,不是嗎?
顛倒if語句的順序,一切都應該沒問題。

2

由於數字10會進入第一個條件,因爲如果(10 < = 50900000)爲真。

您必須指定範圍。

if(roll > 900000 && roll <= 50900000) 

或較低的狀態到最高

if (roll <= 15574) 
{ 
    result.innerHTML = "Category F"; 
    log.innerHTML += "<br />Trigger - win = true; Category F"; //LOG 
} 
else if (roll <= 34888) 
    { 
    ... 

等開始。

2

您必須訂購您的if測試,以便它們的排列順序正確。如果他們全部使用<=,那麼您需要先比較最低值和最高值,然後再比較。否則,它會匹配比您想要的更高的數字。

就我個人而言,我會建議一個表驅動的方法,而不是一個萬億if/else測試。

var rollTests = [ 
    {value: 15574, resultHTML: "Category G", logHTML: "<br />Trigger - win = true", logHTML: "Category G"}, 
    {value: 34888, resultHTML: "Category F", logHTML: "<br />Trigger - win = true", logHTML: "Category F"}, 
    // the rest of the values here ordered by the comparison value .... 
]; 

for (var i = 0, len = rollTests.length; i < len; i++) { 
    if (roll <= rollTests[i].value) { 
     result.innerHTML = rollTests[i].resultHTML; 
     log.innerHTML = rollTests[i].logHTML; 
     break; 
    } 
} 

甚至更​​緊湊:

var rollTests = [ 
    {value: 15574, category: "G"}, 
    {value: 34888, category: "F"}, 
    // the rest of the values here ordered by the comparison value .... 
]; 

var logHTML;  
for (var i = 0, len = rollTests.length; i < len; i++) { 
    if (roll <= rollTests[i].value) { 
     logHTML = "Category " + rollTests[i].category; 
     log.innerHTML = logHTML; 
     result.innerHTML = "<br />Trigger - win = true; " + logHTML; 
     break; 
    } 
}