2012-02-14 44 views
2

我正在用6種不同的問題類型創建一個簡單的數學程序。我希望程序隨機顯示6種類型中的一種,但其中一些問題應該更頻繁地出現。我使用加權數組,但是在從加權數組中選擇問題類型之後,我無法確定它是哪種問題類型,而沒有在if語句中使用10個或更多「或」命令。這裏是一個簡化的版本:太多「或」語句(javascript)

//shuffle array of 10 integers to get a random value 
var rand_10 = [0,1,2,3,4,5,6,7,8,9]; 
fisherYates(rand_10); 

//Set weightedProb 
weightedProb[0] = probType[0]; 
weightedProb[1] = probType[0]; 
weightedProb[2] = probType[0]; 
. 
. 
. 
weightedProb[8] = probType[0]; 
weightedProb[9] = probType[1]; 

theProblem = weightedProb[rand_10[0]]; 
if(rand_10[0] == 0 || rand_10[0] == 1 || rand_10[0] == 2 || rand_10[0] == 3 ||rand_10[0] == 4||rand_10[0] == 5||rand_10[0] == 6||rand_10[0] == 7||rand_10[0] == 8){ 
    //do something 
}else if(rand_10[0] ==9){ 
    //do something else 
} 
+0

以下是JavaScript費雪耶茨洗牌http://bost.ocks.org/mike/shuffle/ – 2012-02-14 07:20:42

+0

'如果(rand_10 [0]> = 0 && rand_10 [0] <9){} else {}' – Cyclonecode 2012-02-14 07:21:35

+0

如果切換if,則變得更容易:'if(rand_10 [0] === 9){/ *做其他事情* /} else { *做點什麼* /}' – Yoshi 2012-02-14 07:53:20

回答

5

簡單的範圍比較(><)是什麼?

例如

if(rand_10[0] >= 0 && rand_10[0] <= 8){ 
    //do something 
}else if(rand_10[0] == 9){ 
    //do something else 
} 
+1

是的,謝謝!正如我在下面寫的,我從來沒有正式受過培訓,所以我的知識存在一些差距。感謝您填寫這篇文章,這非常簡單而有用! – mv3 2012-02-14 07:27:26

+1

@ user877011如果您正在閱讀Javascript的良好教程,請嘗試[Mozilla開發人員中心頁面](https://developer.mozilla.org/zh/JavaScript/Guide),然後當您熟悉這些時,請閱讀[Javascript Garden](http://bonsaiden.github.com/JavaScript-Garden/)。 – GregL 2012-02-14 07:38:36

+0

我也推薦(Code Academy)[www.codeacademy.com]。 – Travis 2015-02-04 21:57:21

1

爲什麼不你要這麼寫?

if(rand_10[0] >= 0 && rand_10[0] <= 8){ 
    //do something 
}else if(rand_10[0] ==9){ 
    //do something else 
} 
+0

謝謝!我從來沒有正式受過訓練,所以我的知識存在差距,但這非常簡單而有用! – mv3 2012-02-14 07:25:30

3

你可以做這樣的事情(注:在某些版本的IE不支持的indexOf):

if ([0,1,2,3,4,5,6,7,8].indexOf(rand_10[0]) > -1) { 
} 

這是假設的價值並不總是一個範圍內,你需要精確的控制。

1

arr = [ 1, 2, 3, 4, 5, 6, 7, 8]

if (rand_10[0] in arr) { 
//... 
} 
0

你也可以使用switch語句:

switch(rand_10[0]) { 
    case 0: 
    case 1: 
    case 2: 
    case 3: 
    case 4: 
    case 5: 
    case 6: 
    case 7: 
    case 8: 
    // do something 
    break; 
    case 9: 
    // do something 
    break; 
} 
0

更好地利用產生加權隨機指數這樣的功能:

function weightedRandomIndex(weights) { 
    var sum = 0, i, x, n=weights.length, rnd; 
    for (i=0; i<n; i++) { 
     sum += weights[i]; 
    } 
    rnd = Math.floor(Math.random()*sum); 
    for (i=0, x=0; i<n; i++) { 
     x += weights[i]; 
     if (x > rnd) return i; 
    } 
} 

然後你ju ST需要指定的權重來挑選你數組索引:

var idx = weightedRandomIndex([9,1]); // 9 to 1 chance for index 0 over index 1 
+0

感謝您的評論。我實際上使用了一個函數來創建隨機加權索引,但我認爲這會更難以閱讀,並且與我所問的內容沒有直接關係,所以我只寫了一個列表,而不是將該函數放在我的問題中。雖然謝謝! – mv3 2012-02-14 15:21:05