3
respostas

Esse é meu código mas o 37 continua aparecendo. O que devo fazer?

<meta charset="utf-8">

<script>

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

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

    var contador = 30

    while(contador <= 40) {
        mostra(contador);
        contador = contador + 1;

        if(contador == 33) {
        contador = contador + 1
        }
        if(contador == 37) {
            contador = contador + 1;

        } 
        else {
        mostra(contador);
        contador = contador + 1
        }
    }

    mostra("FIM")

</script>
3 respostas

Olá Gabriel, podemos retirar algumas linhas do seu código, como o "mostra" e o "contador" logo abaixo do while, ficando então:

 while(contador <= 40) {

        if(contador == 33) {
        contador = contador + 1;
        }
        if(contador == 37) {
            contador = contador + 1;

        } 
        else {
        mostra(contador);
        contador = contador + 1
        }
    }

que é exatamente como a solução do professor. Caso tenha curiosidade, tenho uma outra solução que faz o mesmo que este código e o reduz um pouco: Podemos utilizar o operador lógico "ou" ( | ) para darmos outra condição ao if . Vejamos:

 while(contador <= 40) {

        if(contador == 33 | contador == 37) { //se o contador é igual á 33 OU o contador é igual á 37, então:
           contador = contador + 1
        }  
        else {
        mostra(contador);
        contador = contador + 1
        }
    }

Este operador substitui os dois "if" que colocamos. A ação que está dentro do bloco é executada caso uma das condições sejam verdadeiras. Provavelmente este operador será citado mais tarde nas aulas.

Espero ter ajudado :)

Quando a variável contador chega em 36 o seu else incrementa +1, daí quando ele entra na primeira condição do while, 37 ainda é menor do que 40 e ele já acrescenta +1 antes mesmo do if(contador == 37) ser true, assim ele não passa nessa condição e imprime o 37.

Na lógica da resposta do desafio ficou assim:

var contador = 30;

while(contador <= 40) {

    if( contador == 33 ) {
        contador = contador + 1;
    }
    if(contador == 37) {    
        contador = contador + 1;
    }
    else {
    mostra(contador);
    contador = contador + 1; 
    }
}

Talvez, contador = contador +1 deva ficar fora do if, mas dentro do while, vejo o seguinte código:

<meta charset="UTF-8">
<script>

    function pulaLinha() {

        document.write("<br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    var limiteInferior = parseInt(prompt("Informe um número inteiro para o limite inferior:"));

    var limiteSuperior = parseInt(prompt("Informe um número inteiro para o limite superior:"));

    if (limiteInferior > limiteSuperior) {
        var aux=limiteInferior;
        limiteInferior=limiteSuperior;
        limiteSuperior=aux;
    }

    mostra("Todos os números entre " + limiteInferior + " a " + limiteSuperior + ", exceto 33 e 37!")

    while(limiteInferior <= limiteSuperior) {

        if ((limiteInferior != 33) && (limiteInferior != 37)) {
            mostra(limiteInferior);
        }

        limiteInferior +=1;

    }

    mostra("FIM.");