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

Me da uma ajuda ai professor

Antes de passar para última aula, estou revisando tudo que aprendi. Eu queria fazer o seguinte: Dar para o usuário 3 alternativas de acerto. E quando ele errasse pela terceira vez, iria aparecer uma mensagem dizendo qual era o número pensado e que agora pensou em um outro número diferente.

Tentei usar o While e aumentando o ++ na variável "tentativas "como ensinou na outra aula mas não to conseguindo rodar. Pode dar uma ajuda ai nessa ? Obrigado !

<meta charset="UTF-8">

<input/>
<button>Compare com o meu segredo</button>
<br>

<script>

var segredo = Math.round(Math.random() *10);
var input = document.querySelector("input");
    input.focus();

var tentativas = 0;    

while(tentativas == 3){
    document.write("Você só tinha 3 tentativas. Eu estava pensando no número" + segredo + " Agora vou pensar em outro")
    segredo = Math.round(Math.random() *10);
}

function compara(){
    if (segredo == input.value){
        alert("Você acertou");
        segredo = Math.round(Math.random() *10);
        tentativas = 0;

    }else{
        alert("Você errou");
        tentativas++

    }
    input.value = "";
    input.focus();
}

var button = document.querySelector("button");
button.onclick = compara;


</script>
7 respostas

Eae Luis, talvez possa lhe ajudar.

Note que seu laço está dizendo:

Enquanto tentativas for igual a 3:

while(tentativas == 3){
    document.write("Você só tinha 3 tentativas. Eu estava pensando no número" + segredo + " Agora vou pensar em outro")
    segredo = Math.round(Math.random() *10);
}

Nessa caso você quer ele rode enquanto não seja 3, tente mudar para

while(tentativas < 3){
//Resto do código
}

Pessoal, nessa lógica, o document.write será chamado depois da página ter sido exibida para o usuário e isso limpará a tela inteira. É uma limitação do document.write. Não ensinei formas mais avançadas de se escrever na tela porque é um curso de lógica.

Nesse caso, é necessário usar o alert no seu loop se assim desejar.

while(tentativas == 3){
    alert("Você só tinha 3 tentativas. Eu estava pensando no número" + segredo + " Agora vou pensar em outro")
    segredo = Math.round(Math.random() *10);
}

Quando for evoluindo na linguagem JavaScript aprenderá formas mais avançadas de se escrever na tela.

solução!

Olá.

O Jabel quase acertou. Na verdade, no seu caso você nunca entraria no while, porque ele só vai fazer a verificação quando a página for renderizada. A variável tentativas no início vale 0, logo não entrará no while e nunca mais olhará pra ele, a não ser que você dê refresh na página, mas aí tudo vai zerar.

Bom, o que você tem que fazer é criar uma condição dentro da sua função compara() que verifica o número de tentativas. Você pode fazer o seguinte, veja só:

function compara(){
    if (segredo == input.value)
    {
        alert("Você acertou");
        segredo = Math.round(Math.random() *10);
        tentativas = 0;

    } 
        else 
    {
        alert("Você errou");
        tentativas++
    }

    if (tentativas >= 3)    
    {
        alert("Você só tinha 3 tentativas. Eu estava pensando no número" + segredo + " Agora vou pensar em outro");
        segredo = Math.round(Math.random() *10);
        tentativas = 0;
    }

    input.value = "";
    input.focus();
}

E aí você arranca aquele while lá de cima. Você compreendeu o que eu fiz? Aquele while seu nunca seria verdade porque ele não estava em uma função, logo ele só seria verificado uma vez quando a página carregasse e, como ele só era verdade se tentativas tivesse o valor 3, nunca seria verdade, pois tentativas inicia com valor 0. Mesmo que você chamasse ele em uma função, daria problemas pois, quando ele fosse verdade, nunca mais sairia do while, viraria um loop infinito já que você não muda mais o valor de tentativas dentro dele.

Oi Luis? Tudo certo, agora com a ajuda dos colegas do fórum?

Oloko bixo! Entao dá pra usar o "variavel++" mesmo sem o while/for?!

Tava me matando pra usar o loop aqui! Valeu pelas dicas pessoal!

Dá sim, Felipe. Este operador pode ser utilizado independente de estar dentro de um laço ou não.