Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Interrompendo a Repetição

Bom dia, estou com uma dúvida que tem matado minha cabeça

Estou tentando fazer a reprodução do meu jogo sorteado me informar sempre se eu digitar o número a condição que ele se encontra.

Beleza, o raciocinio lógico está correto porque ele sempre tá reproduzindo as respostas baseadas no chute, porém ele nunca imprime de acordo com uma tentativa gasta, só imprime as condições quando acabam as tentativas.

Eu tenho que colocar alguma coisa a cada tentativa pra cair dentro da condição? Não sei mais o que fazer kkkkk decidi tirar dúvida pq não consegui achar uma solução pra isso.

Abaixo o meu código:

var numeroSorteado = 4;
//Math.round(Math.random() * 10)
var tentativas = 1;

while(tentativas <= 3){

    var chute = parseInt(prompt("Digite o número que você deseja escolher"));

    if(chute == numeroSorteado){

    imprimir("parabéns você acertou o número");
    break;

    }else if(chute > numeroSorteado){ //nem somente com if funciona

    imprimir("O número é menor cara, tenta de novo.");
    tentativas++;

    }else if(chute < numeroSorteado){//nem somente com if funciona

    imprimir("O numero é maior cara, tenta mais uma vez");
    tentativas++;

    }else{
    imprimir("você errou e acabaram suas tentativas cara, melhor tentar um outro dia");
    tentativas == 3;
}

}


imprimir("O numero aleatório era:" + numeroSorteado);
5 respostas

Olá, Victor.

Pelo que entendi, você quer que o programa te informe quando você tiver esgotado suas tentativas, certo? Veja comigo a cadeia lógica que você construiu dentro do laço:

  • Se o número for igual ao sorteado, o programa acaba e você vence;
  • Se o número for maior que o sorteado, o programa te dá a informação;
  • Se o número for menor que o sorteado, o programa te dá a informação;
  • Senão, o programa diz que acabaram as tentativas.

Concorda comigo que a quarta opção nunca será alcançada? Ou o número tem que ser igual, ou menor, ou maior. Não tem outra possibilidade. Por isso, ele sempre vai entrar dentro de algumas das três primeiras opções, nunca dentro da última.

Uma possível solução seria colocar uma verificação do número de tentativas feitas no final do programa. Por exemplo:

var numeroSorteado = Math.round(Math.random() * 10);
var tentativas = 1;

while(tentativas <= 3){

    var chute = parseInt(prompt("Digite o número que você deseja escolher"));

    if(chute == numeroSorteado){

            imprimir("parabéns você acertou o número");
            break;

    } else if(chute > numeroSorteado){ 

            imprimir("O número é menor cara, tenta de novo.");

    } else if(chute < numeroSorteado){

            imprimir("O numero é maior cara, tenta mais uma vez");

    }

    tentativas++;
}

if(tentativas > 3) {
        imprimir("você errou e acabaram suas tentativas cara, melhor tentar um outro dia");
}

imprimir("O numero aleatório era:" + numeroSorteado);

Espero que tenha te ajudado. Faça um teste e veja se funcione. Caso ainda tenha problemas, coloca aqui pra gente te ajudar.

Duas dicas:

  1. == é diferente de =. O primeiro serve para comparar dois valores, o segundo serve para atribuir um valor a uma variável.
  2. Mantenha sempre o código identado, isso ajuda bastante na compreensão ;)

Na verdade Romulo, ele estava entrando na condições normalmente exceto a condição final mesmo, obrigado por isso.

O grande ponto é:

Ele não está reproduzindo a resposta de uma das condições após eu inserir uma informação no prompt, só quando a repetição acaba, ou seja, se são 3 tentativas e a condição não é a que eu ACERTEI, ele nunca imprime diretamente a resposta da saída, só quando se acabam as tentativas, mas daí ele imprime todas as respostas CORRETAMENTE, mas não antes das tentativas acabarem.

Na minha cabeça eu gostaria que ficasse a cada tentativa entrando dentro de uma condição e uma saída pro usuário, pra uma espécie de dica se o número que ele está chutando é maior ou menor, acabando as tentativas ele diria que as tentativas acabaram e game over, acontece isso só não nessa sequência, só quando as tentativas de fato acabam.

Desculpa se não estou conseguindo reproduzir corretamente aquilo que o código está fazendo e o que eu quero que ele faça, sou iniciante :/

Mesmo com seu código a saída ainda é a mesma. Ele só reproduz ao finalizar a repetição.

Eu pensei em criar uma variável pra dica pra meio que reproduzir cada uma das respostas, não sei se é isso que tenho que fazer de fato.

solução!

Oi, Victor, não precisa se desculpar. Todos nós temos dificuldades de fazer o código funcionar como gostaríamos heheh

Na verdade, eu também tinha entendido sua dúvida de forma equivocada.

Então, acontece que durante a execução do laço de repetição, o navegador está em um "modo de execução do JavaScript". Durante esse modo, ele não faz novas renderizações no DOM, justamente para evitar desperdício de processamento. Somente após o loop, o navegador volta ao "modo de renderização" e então escreve tudo que você tinha solicitado na tela.

Para contornar isso e você receber as mensagens que deseja, vamos usar um alert em vez de escrever na tela. Uma sugestão de código:

function informar(texto) {
        alert(texto);
}

var numeroSorteado = Math.round(Math.random() * 10);
var tentativas = 1;

while(tentativas <= 3) {

        var chute = parseInt(prompt("Digite o número que você deseja escolher"));

        if(chute == numeroSorteado){
            informar("parabéns você acertou o número");
            break;
        } else if(chute > numeroSorteado){ 
            informar("O número é menor cara, tenta de novo.");
        } else{
            informar("O numero é maior cara, tenta mais uma vez");
        }

        tentativas++;
}

if(tentativas > 3) {
        informar("você errou e acabaram suas tentativas cara, melhor tentar um outro dia");
}

informar("O numero aleatório era:" + numeroSorteado);

Veja se funciona como gostaria e me dê um retorno.

Espero que ajude!

Show de bola, Romulo, muito obrigaodo.

Não havia pensado que poderia inserir um alert pro código se comportar do jeito que imaginei.

Agora uma dúvida:

Teria como eu fazer dessa maneira só que imprimindo na tela? Ou somente com os alerts que isso é possível?