2

我是 Javascript 的新手,我正试图绕开 while 循环。我了解他们的目的,我想我了解他们的工作方式,但我遇到了麻烦。

我希望 while 值不断重复,直到两个随机数相互匹配。目前,while 循环只运行一次,如果我希望它重复自己,我需要再次运行它。

如何设置此循环,以便它自动重复 if 语句,直到 diceRollValue === compGuess?谢谢。

diceRollValue = Math.floor(Math.random()*7);
compGuess = Math.floor(Math.random()*7);
whileValue = true;

while (whileValue) {
    if (diceRollValue === compGuess) {
        console.log("Computer got it right!")
        whileValue = false;
    }
    else {
        console.log("Wrong. Value was "+diceRollValue);
        whileValue = false;
    }
}
4

3 回答 3

6

那是因为你只是在 while 之外执行随机数生成器。如果您想要两个新数字,则需要while 语句中执行它们。类似于以下内容:

var diceRollValue = Math.floor(Math.random() * 7),
    compGuess = Math.floor(Math.random() * 7),
    whileValue = true;
while (whileValue){
  if (diceRollValue == compGuess){
    console.log('Computer got it right!');
    whileValue = false; // exit while
  } else {
    console.log('Wrong. Value was ' + diceRollValue);
    diceRollValue = Math.floor(Math.random() * 7); // Grab new number
    //whileValue = true; // no need for this; as long as it's true
                         // we're still within the while statement
  }
}

如果你想重构它,你也可以使用break退出循环(而不是使用变量):

var diceRollValue = Math.floor(Math.random() * 7),
    compGuess = Math.floor(Math.random() * 7);
while (true){
  if (diceRollValue == compGuess){
    // breaking now prevents the code below from executing
    // which is why the "success" message can reside outside of the loop.
    break;
  }
  compGuess = Math.floor(Math.random() * 7);
  console.log('Wrong. Value was ' + diceRollValue);
}
console.log('Computer got it right!');
于 2012-10-18T02:29:44.993 回答
1

您有两个问题,第一个是您whileValue在 if 和 else 块中都进行了设置,因此无论随机数的值如何,循环都会在一次迭代后中断。

其次,您在循环之前生成猜测,因此您将一遍又一遍地检查相同的值。

所以删除whileValueelse 块中的compGuess赋值并将赋值移动到 while 循环中。

于 2012-10-18T02:35:12.063 回答
1

将 2 个随机变量放入循环中。

whileValue = true;

while (whileValue) {
    diceRollValue = Math.floor(Math.random()*7);
    compGuess = Math.floor(Math.random()*7);
    if (diceRollValue === compGuess) {
        console.log("Computer got it right!")
        whileValue = false;
    }
    else {
        console.log("Wrong. Value was "+diceRollValue);
    }
}
于 2012-10-18T02:39:34.350 回答