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

Não consigo entender a estrutura do While

Olá! Estou tendo uma certa dificuldade em entender a estrutura do código. Eu entendi a sua função mas, na hora da montagem, meu código não tem saído mais como eu esperava. Parece que nem sei mais utilizar o if. Vou compartilhar o exercício da Copa aqui:

<meta charset="UTF-8">

<script>

    function mostra(text) {
        document.write(text + "<br>");
    }

    var limite = prompt("Entre com a data limite");
    var anoCopa = 1930;

    while (anoCopa <= limite) {

        mostra("Teve copa em " + anoCopa);
        anoCopa = anoCopa + 4;

        if (limite > 2018 && limite < 1930) {
            alert("Não há registro de Copa nessa data. Insira outra data limite.")
            var limite = prompt("Entre com a data limite");
        }
    }
    mostra("FIM");

</script>

Eu preciso saber de algumas informações:

  • Por favor, para maior entendimento, eu preciso saber onde eu erro e qual foi o erro do meu raciocínio;
  • Onde eu posso encontrar mais exercícios desse tópico, referente a condição while, para que eu possa praticar mais?;
  • Se tiver algum artigo falando sobre esse tema, seria de grande ajuda.

Obrigada :)

3 respostas
solução!

Bom dia, tudo certo?

Existem dois erros de lógica no seu código.

O primeiro seria na condição do while. Você determinou que o laço deve se repetir até que anoCopa seja menor ou igual ao limite digitado pelo usuário. Nesse caso, se eu, como usuário, digitar um valor inferior à anoCopa, que seria 1930, o laço será ignorado e o código vai direto para a função mostra("FIM"), não exibindo o seu alert que está dentro do if.

O segundo erro está na comparação que você está fazendo dentro do if que serve para validar a entrada feita pelo usuário. Ao utilizar o && você está dizendo que a primeira condição E a segunda condição precisam ser TRUE. Isso significa que o número digitado pelo usuário tem que ser maior que 2018 e menor que 1930 ao mesmo tempo. Isso está fazendo seu teste condicional ter comportamento errado. Para corrigir isso, você deve trocar para o operador lógico || (ou/or). Este operador verifica se 1 das condições é TRUE, e caso seja, retorna TRUE. O operador or só retorna FALSE quando as 2 condições forem FALSE.

Eu também coloquei todo o bloco do seu código dentro de outro laço de while, cuja função é repetir o prompt até que a condição do IF seja validada. O break que coloquei no fim serve para interromper esse laço.

Vou deixar abaixo a modificação que eu fiz no seu código para você poder visualizar melhor as mudanças que eu fiz, fico à disposição se tiver alguma dúvida.

function mostra(text){
    document.write(text + "<br>");
}

while(true){

    var limite = prompt("Entre com a data limite.");
        var anoCopa = 1930;

  if (limite > 2018 || limite < 1930){
      alert("Não há registro de copa nessa data. Insira outra data limite.");
  } else {

    while (anoCopa <= limite) {
      mostra("Teve copa em "+ anoCopa);
        anoCopa = anoCopa + 4;

      }

    mostra("FIM");
    break;

  }

}

Editando minha resposta, pois creio que a solução do Guilherme esteja bem melhor e mais didática :) Bons estudos!

Olá, Guilherme F Almeida! Vi sua resposta logo que me respondeu mas estou vendo com mais calma agora. Obrigada pela estrutura e a explicação da lógica.

Giovani, eu não vi a sua resposta anterior a sua edição, mas, de qualquer forma, obrigada por vir aqui ajudar. :)