0

しばらくの間、さまざまな方法を試してきましたが、何をしてもうまくいかないところまで来ました。

これが私がやろうとしたことです。まず、乱数を作成して配列に追加します。

for(.......){
  random[i] = Math.floor(Math.random() * (word.length));

次に、別の乱数が配列に追加されます。

randomkey[i] = Math.floor(Math.random() * (word.length));

次に、この関数を作成します。

var accept=true;
// word is a text (length:22)
function acceptRandom(random,word){
  stop:
    for(var i=0;i<randomkey.length+1; i++){
      if(word[i] != word[random])
        accept = true;
      else {
        accept = false;
        break stop;
      }
    }
    if(accept == false){
      newrandom = Math.floor(Math.random() * (word.length));
      // Random number exists so we call the function again with a new value
      acceptRandom(newrandom,word);
    } else
      return random;
}

問題は、乱数が既に存在する場合、新しい値を返さないことです。

4

2 に答える 2

2

リスト全体を繰り返し処理しているため、(単語をそれ自体と比較しているため)ポイントが常に存在します。簡単な修正は次のようになります。word[i] == word[random]

for(var i=0;i<randomkey.length+1; i++){
    if(word[i] == word[random] && i !== random) {
        accept = false;
        break;
    }
}

また、再帰呼び出しを返す必要があります。

if(accept == false){
      newrandom = Math.floor(Math.random() * (word.length));
      // Random number exists so we call the function again with a new value
      return acceptRandom(newrandom,word);
}

正直なところ、あなたはXY 問題に遭遇したと思います。ここで何をしようとしているのですか?おそらくもっと良い方法があります。

于 2012-11-18T03:10:08.703 に答える
0

変化する:

for(.......){
  random[i] = Math.floor(Math.random() * (word.length));
// You're assigning a random number to random[i]

for(.......){
  random[i] = words[Math.floor(Math.random() * (word.length))];
// Whereas you should be assigning words[random number] to random[i]
于 2012-11-18T03:18:51.020 に答える