Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

242
Visualizações
I have trouble managing my for loop inside while loo[ and vice versa

I have been recently working on a project to make a rock paper scissor game in JS console. Right now as you can see in the code below I am only testing the waters with rock and scissor and will soon be adding paper as soon as I resolve this bug. I want to play this game for six rounds between a randomly generated pick (variable b) and user's choice (variable a).

I want the for loop to run 6 times to play six rounds. There is no score counter whatsoever for now. As I run the for loop I want the randomly generated pick to be logged in console and then the user will be asked for the selection and his/her choice will be logged after that. I then want my if statements inside the do-while loops to evaluated the current two values of a and b and give me the result I am trying to log (eg. Rock crushes scissor! You loose!) immediately after the two responses are logged. Then another random choice will be generated and logged and so on....

What is happening right now is that I am getting the if statements evaluated only after the sixth iteration of for loop whereas it should give me the logged statement from if conditional after every iteration.

Here is the code:

var arr = ['rock', 'scissor']
let win = false

function play(arr){

  
    
    do{

      for(let i=0; i<=5;i++){
        var a = prompt('Enter choice:')
        console.log(a)
        var b = arr[(Math.floor(Math.random()*2))]
        console.log(b)

        if(a==="rock" && b==="scissor"){
          console.log("Rock crushes Scissor! You win!") 
          win=true
        }
        
        else if(b==="rock" && a==="scissor"){
          console.log("Rock crushes Scissor! You lose!") 
          win=true
        }
    
      }

    }
    while(!win);
  
    check_winner(win)
  }

 
function check_winner(win){
  if(win===true){
    console.log("gamne over")
  }
  else{
    prompt("Enter again")
  }
}

play(arr)

I am new to JS and having a tough time dealing with this bug. Maybe you sincere people could get me out of this predicament. Any help will be extremely appreciated. Thank you!

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

here you go :

let arr = ['R', 'P', 'S']
let win = false

function play(arr){

  let BotScore = 0;
  let UserScore = 0;
  let round = 1;
  alert('use R as Rock ,P as Paper and S as Scissor')
  while(round<=5){
    let UserChoice = prompt('round_'+round+' Enter choice:')
   
    let BotChoice = Math.floor(Math.random() * 3)
    BotChoice = arr[BotChoice];
    if(UserChoice == 'S' && BotChoice == 'R'){
      BotScore++;
      round++;
      alert('Bot Won')
    }else if(UserChoice == 'S' && BotChoice == 'P'){
      UserScore++;
      round++;
      alert('You Won')
    }else if(UserChoice == 'S' && BotChoice == 'S'){
      alert('Draw')
    }else if(UserChoice == 'R' && BotChoice == 'P'){
      BotScore++;
      round++;
      alert('Bot Won')
    }else if(UserChoice == 'R' && BotChoice == 'S'){
      UserScore++;
      round++;
      alert('You Won')
    }else if(UserChoice == 'R' && BotChoice == 'R'){
      alert('Draw')
    }else if(UserChoice == 'P' && BotChoice == 'R'){
      UserScore++;
      round++;
      alert('You Won')
    }else if(UserChoice == 'P' && BotChoice == 'S'){
      BotScore++;
      round++;
      alert('Bot Won')
    }else if(UserChoice == 'P' && BotChoice == 'P'){
      alert('Draw')
    }
  }
    
    let Result = UserScore > BotScore ? 'You Won' : 'Bot Won'
    alert('Your Score : '+UserScore+' Bot Score : '+BotScore+'['+Result+']')
    
    
  }

 


play(arr)
about 4 years ago · Juan Pablo Isaza Relatório

0

Additionaly to the things mentioned in the comments

  • win = false if lost
  • check_winner(win) outside do while loop, so only executed if win=true

you might want to

  • use alerts inside the for loop instead of console.logs, so the results are directly visible
  • include a check on a for 'null' and end the game in that case ('a' gets null if you press 'cancel' or 'esc')
  • notice, that the inner for loop will run until finished, even if win would be set to true meanwhile

do{
   for(let i=0; i<=5;i++){
     console.log(i)
     if(i === 3) {      
       win = true
       console.log('win is true, get out of here?!?')
     }
   }
}
while(!win);

console.log('----------------------------- next round');

do{
   for(let i=0; i<=5;i++){
     console.log(i)
     if(i === 3) {      
       win = true
       console.log("win is true, get out with 'break")
       break;
     }
   }
}
while(!win);

It might help to describe the logic the game should have to find the possible ways to code it

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda