JavaScript中的无限循环-While循环

JavaScript中的无限循环-While循环,javascript,Javascript,有人知道为什么这会导致无限循环吗。我就是不明白为什么 我觉得问题可能是我的while循环在五点以下 while循环应该在5点停止,当玩家或计算机到达该点时,游戏应该停止 这是石头、布、剪刀。每场比赛的结果要么是玩家赢,要么是电脑赢,要么是平局 当任一玩家赢下5场时,游戏结束 问题是游戏没有按预期结束 function getInput() { console.log("Please choose either 'rock', 'paper', or 'scissors'."); retu

有人知道为什么这会导致无限循环吗。我就是不明白为什么

我觉得问题可能是我的while循环在五点以下

while循环应该在5点停止,当玩家或计算机到达该点时,游戏应该停止

这是石头、布、剪刀。每场比赛的结果要么是玩家赢,要么是电脑赢,要么是平局

当任一玩家赢下5场时,游戏结束

问题是游戏没有按预期结束

function getInput() {
  console.log("Please choose either 'rock', 'paper', or 'scissors'.");
  return prompt("Please choose either 'rock', 'paper', or 'scissors'");
}

function getPlayerMove() {
  return getInput();
}

function randomPlay() {
  var randomNumber = Math.random();
  if (randomNumber < 0.33) {
      return "rock";
  } 
  else if (randomNumber < 0.66) {
    return "paper";
  } 
  else {
    return "scissors";
  }
}


function getComputerMove() {
  return randomPlay();
}

function getWinner(playerMove,computerMove) {
  var winner;
  if (playerMove === 'rock' && computerMove === 'scissors') {  
    winner = 'Player';
  }  
  else if (playerMove === 'scissors' && computerMove === 'paper') {
    winner='Player';
  }  
  else if (playerMove === 'paper' && computerMove === 'rock') {
    winner='Player';
  } 
  else if (playerMove === 'paper' && computerMove === 'scissors') {
    winner='Computer';
  }  
  else if (playerMove === 'rock' && computerMove === 'paper') {
    winner='Computer';
  }  
  else if (playerMove === 'scissors' && computerMove === 'rock') {
    winner = 'Computer';
  }  
  else { 
  winner = "tie";
  }
  return winner;
}

// A big limitation of this game is the user is only allowed to choose once! To allow more choices you'd need to design the program differently 

function playToFive() {
  var playerWins = 0;
  var computerWins = 0;
  var playerMove = getPlayerMove();
  while ((playerWins <= 5) || (computerWins <= 5)) {
    var computerMove = getComputerMove();
    var winner = getWinner(getPlayerMove, getComputerMove);
    console.log('The player has chosen ' + playerMove + '. The computer has chosen ' + computerMove);
    if (winner === "player") {
        playerWins += 1; 
    } 
    else if (winner === "computer") {
        computerWins += 1;
    } 
    if ((playerWins = 5) || (computerWins = 5)) {
        console.log("The game is over! " + "The " + winner + " has taken out the game!");
        console.log("The final score was. " + playerWins + " to " + computerWins);
    }
    else {
        console.log("The " + winner + ' takes the round. It is now ' + playerWins + ' to ' + computerWins);
    }
  }
}

playToFive ();
函数getInput(){ 日志(“请选择‘石头’、‘布’或‘剪刀’”; 返回提示(“请选择‘石头’、‘布’或‘剪刀’”); } 函数getPlayerMove(){ 返回getInput(); } 函数随机播放(){ var randomNumber=Math.random(); 如果(随机数<0.33){ 返回“岩石”; } 否则如果(随机数<0.66){ 返回“文件”; } 否则{ 返回“剪刀”; } } 函数getComputerMove(){ 返回随机播放(); } 函数getWinner(playerMove、computerMove){ var赢家; 如果(playerMove==='rock'和&computerMove==='scissors'){ 赢家=‘玩家’; } 否则如果(playerMove===‘剪刀’和&computerMove===‘纸’){ 胜利者=‘玩家’; } 否则,如果(playerMove==='paper'和&computerMove=='rock'){ 胜利者=‘玩家’; } 否则,如果(playerMove==='paper'和&computerMove==='剪刀'){ 优胜者:计算机; } 否则,如果(playerMove=='rock'和&computerMove=='paper'){ 优胜者:计算机; } 否则如果(playerMove==='scissors'和&computerMove==='rock'){ 获胜者=‘计算机’; } 否则{ 获胜者=“平局”; } 返回赢家; } //这个游戏的一大限制是用户只能选择一次!要允许更多选择,您需要以不同的方式设计程序 函数playtoff(){ var-playerWins=0; var=0; var playerMove=getPlayerMove();
while((playerWins首先,在while循环中,您也需要将其更改为&&语句,否则,如果计算机为8,而播放器为3,则循环将继续,直到两个播放器都大于5。

问题是这一行

var winner = getWinner(getPlayerMove, getComputerMove);
您正在将函数引用传递给getWinner()方法

这意味着您以后需要再次移动,因此将方法更改为(代码中修复了多个问题)

函数playToFive()
{
var-playerWins=0;
var=0;

while((playerWins为使此if相应运行:

if ((playerWins = 5) || (computerWins = 5)) {}
您需要使用
=
操作符,因为只有一个
=
用于赋值

if ((playerWins == 5) || (computerWins == 5)) {}

谢谢各位,有很多问题

干杯,伙计们。绝对需要&而不是| | |。这场| | |让比赛继续进行


此外,还需要var winner=getWinner(getPlayerMove,getComputerMove)。这会导致无限循环。

我认为首先您应该了解(==)和(===)之间的区别

使用此代码(条件代码不是赋值) 而不是## 问题是这一行

您正在将函数引用传递给getWinner()方法

使用这个

 var winner = getWinner(playerMove , computerMove );
而不是

 var winner = getWinner(getPlayerMove, getComputerMove);
对于此功能

function getWinner(playerMove,computerMove) {
  var winner;
  if (playerMove === 'rock' && computerMove === 'scissors') {  
    winner = 'Player';
  }  
  else if (playerMove === 'scissors' && computerMove === 'paper') {
    winner='Player';
  }  
  else if (playerMove === 'paper' && computerMove === 'rock') {
    winner='Player';
  } 
  else if (playerMove === 'paper' && computerMove === 'scissors') {
    winner='Computer';
  }  
  else if (playerMove === 'rock' && computerMove === 'paper') {
    winner='Computer';
  }  
  else if (playerMove === 'scissors' && computerMove === 'rock') {
    winner = 'Computer';
  }  
  else { 
  winner = "tie";
  }
  return winner;
}
每次此方法都将
tie
设置为赢家


但是你应该知道
(==)equalto
(==)相等值和相等类型之间的区别

如果循环应该在任一玩家达到5时结束,比较应该是
如果((playerWins=5)|(computerWins=5))
应该是
如果((playerWins=5)|(computerWins==5))
不要发布另一个答案,仅仅是重述别人告诉你的内容,投票并相应地接受。
 if ((playerWins = 5) || (computerWins = 5)) { // Error Code.
            console.log("The game is over! " + "The " + winner + " has taken out the game!");
            console.log("The final score was. " + playerWins + " to " + computerWins);
        }
 var winner = getWinner(playerMove , computerMove );
 var winner = getWinner(getPlayerMove, getComputerMove);
function getWinner(playerMove,computerMove) {
  var winner;
  if (playerMove === 'rock' && computerMove === 'scissors') {  
    winner = 'Player';
  }  
  else if (playerMove === 'scissors' && computerMove === 'paper') {
    winner='Player';
  }  
  else if (playerMove === 'paper' && computerMove === 'rock') {
    winner='Player';
  } 
  else if (playerMove === 'paper' && computerMove === 'scissors') {
    winner='Computer';
  }  
  else if (playerMove === 'rock' && computerMove === 'paper') {
    winner='Computer';
  }  
  else if (playerMove === 'scissors' && computerMove === 'rock') {
    winner = 'Computer';
  }  
  else { 
  winner = "tie";
  }
  return winner;
}