2

私は6つの異なる問題タイプで簡単な数学プログラムを作成しています。プログラムに6つのタイプのいずれかをランダムに表示させたいのですが、いくつかの問題はもっと頻繁に現れるはずです。重み付き配列を使用していますが、重み付き配列から問題の種類を選択した後、ifステートメント内で10個以上の「or」コマンドを使用しないと問題の種類を特定できません。簡略化したバージョンは次のとおりです。

//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
}
4

6 に答える 6

5

単純な範囲の比較(>および<)はあなたが求めているものでしょうか?

例えば

if(rand_10[0] >= 0 && rand_10[0] <= 8){
  //do something
}else if(rand_10[0] == 9){
  //do something else
}
于 2012-02-14T07:22:00.523 に答える
3

次のようなことができます(indexOfは一部のIEバージョンではサポートされていないことに注意してください)。

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

これは、値が常に範囲であるとは限らず、きめ細かい制御が必要であることを前提としています。

于 2012-02-14T07:21:48.093 に答える
1

なぜそう書きたくないのですか?

if(rand_10[0] >= 0 && rand_10[0] <= 8){
  //do something
}else if(rand_10[0] ==9){
  //do something else
}
于 2012-02-14T07:21:21.743 に答える
1

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

if (rand_10[0] in arr) {
//...
}
于 2012-02-14T07:23:38.680 に答える
1

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;
 }
于 2012-02-14T07:24:58.420 に答える
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;
    }
}

次に、配列インデックスを選択するための重みを指定する必要があります。

var idx = weightedRandomIndex([9,1]);  // 9 to 1 chance for index 0 over index 1
于 2012-02-14T07:38:51.577 に答える