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

Tem como eu melhorar (reduzir) a quantidade de argumentos dentro do while?

minha questão é: tive que digitar mostra("Devido a Segunda Guerra Mundial não teve copa nos anos de 1942 e 1944"); duas vezes dentro do "while" seria possível criar um outro else if (ja tentei) ou algo como if (anoCopa == 1942 || 1946) reduziria mais ainda meu codigo?

<meta charsey="UTF-8">

<script>

    function pulaLinha(){
        document.write("<br>");
        document.write("<br>");
    }

    function mostra(frase){
        document.write(frase);
        pulaLinha();
    }

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

    while(anoCopa <= limite){
        if(anoCopa == 1942){
            anoCopa = anoCopa + 8;
            mostra("Devido a Segunda Guerra Mundial não teve copa nos anos de 1942 e 1944");
        } else if(anoCopa == 1946){
            anoCopa = anoCopa + 4;
            mostra("Devido a Segunda Guerra Mundial não teve copa nos anos de 1942 e 1944");
        }


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

    mostra("FIM");

</script>
2 respostas
solução!

Antes de sugerir uma forma de simplificar, fiz uma alteração no texto para: "Devido a Segunda Guerra Mundial não teve copa nos anos de 1942 e 1946". Antes estava 1944, conforme sua condição else if (anoCopa == 1946) e pelo que vi, acho que foi em 46 que não teve a copa :)

Você pode usar o operador OU (||), conforme sugeriu, a escrita dele ficará assim:

 if (anoCopa == 1942 || anoCopa == 1946) {
      anoCopa = anoCopa + 4;
      mostra(
        "Devido a Segunda Guerra Mundial não teve copa nos anos de 1942 e 1946"
      );
    }

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

Conforme a condição acima, ao passar pelo ano de 1942, o valor irá incrementar para 1946, a mensagem na função mostra será exibida, conforme queremos. Mas perceba que logo após o if tem outra chamada da função mostra, e aí teremos como saída "Teve copa em 1946". Que não é o que queremos.

Para evitar isso, quando a condição do if for verdadeira, ou seja, quando os anos forem 1942 ou 1946, vamos usar a instrução continue que fará com que o código volte para o loop, assim não executará o que vem depois do if. O código final ficará:

<meta charset="UTF-8" />

<script>
  function pulaLinha() {
    document.write("<br>");
    document.write("<br>");
  }

  function mostra(frase) {
    document.write(frase);
    pulaLinha();
  }

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

  while (anoCopa <= limite) {
    if (anoCopa == 1942 || anoCopa == 1946) {
      anoCopa = anoCopa + 4;
      mostra(
        "Devido a Segunda Guerra Mundial não teve copa nos anos de 1942 e 1946"
      );
      continue;
    }

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

  mostra("FIM");
</script>

vlw, nao sabia desse comando continue. Basicamente o o continue; é usado após uma "exceção" dentro de um loop.