我一直在尝试不同的方式,而且我已经达到了这一点,无论我做什么都会出错。
所以这就是我试过的。首先,我创建一个随机数并将其添加到数组中:
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;
}
现在,问题是当随机数已经存在时,它不会返回新值。
答案 0 :(得分: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 problem。你究竟想在这做什么?可能有更好的方法。
答案 1 :(得分: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]