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

Dúvida no Ex. 1 da Aula 7 - Desafio final

Boa noite galera.

Estava brincando um pouco com o código e gostaria de implementar uma verificação nos números que o usuário irá digitar. Para isto fiz um if, onde analisa se o número digitado é <0 ou >60, só que não está funcionando. Não estou conseguindo perceber o erro, pois o programa não gera erro. Estou postando o código abaixo. Se alguém puder ajudar. Desde já agradeço.

<meta charset="utf-8">
<script>
    var pulaLinha=function(){
        document.write("<br>"+"<hr>"+"<hr>");
    };

    var mostra=function(texto){
        document.write(texto);
        pulaLinha();
    };

    var quantDeAcerto=function(jogados,sorteados){
        var acerto=0;
        for(i = 0; i < 6; i++){
            for(j = 0; j < 6; j++){
                if(jogados[i]==sorteados[j]){
                    acerto++;
                }
            }
        }
        return acerto;
    };

    alert("Jogo da Mega-sena! Se você quiser apostar digite seu nome e os 6 números.");
    var nome=prompt("Digite seu nome.");
    var numerosJogados=[];
    for(i = 0; i < 6; i++){
    var number=parseInt(prompt("Digite o "+(i+1)+"º número."));
        if(number < 0 && number >60){
            alert("Número não pode ser negativo e nem maior que 60. Digite novamente.");
            number=parseInt(prompt("Digite o "+(i+1)+"º número."));
        }else{
            numerosJogados[i]=number;
        }
    }

    alert("Vamos sortear os números da mega-sena.");
    var numerosSorteados=[];
    for(i = 0; i < 6; i++){
        numerosSorteados[i]=Math.round(Math.random() *60);
    }


    var acertos=quantDeAcerto(numerosJogados,numerosSorteados);

    mostra("Números jogados: "+numerosJogados);
    mostra("Números sorteados: "+numerosSorteados);
    mostra(nome +" você obteve "+ acertos+" acertos.");

</script>
2 respostas
solução!

Olá Rafael! Veja bem, você cometeu um pequeno erro em seu código e por isso ele não estava funcionando. Vamos analisar o if() que você fez:

if(number < 0 && number >60){
            alert("Número não pode ser negativo e nem maior que 60. Digite novamente.");
            number=parseInt(prompt("Digite o "+(i+1)+"º número."));
        }else{
            numerosJogados[i]=number;
        }

Repare na condição que você colocou: number < 0 && number >60 . Interpretando seria o seguinte: o número deve ser menor que zero E maior que 60. O condicional && (E) deve ser usado quando queremos que duas condições seja feitas juntas, logo no seu caso que o número seja menor que zero e maior que sessenta. Mas isso é matematicamente impossível. Não existe um número que seja menor que zero e maior que sessenta ao mesmo tempo. Por isso que o código de seu if() nunca era chamado, pois essa condição nunca seria verdadeira.

Assim, para resolver bastaríamos trocar o && (E) por || (OU). Desta forma a sentença ficaria: número deve ser menor que zero OU maior que 60. Assim, o número só precisa atender uma condição, ou ser maior que sessenta ou ser menor que zero e o código do if() vai ser executado.

No entanto, há outro problema em seu código, vamos analisar ele com a alteração:

if(number < 0 || number >60){
            alert("Número não pode ser negativo e nem maior que 60. Digite novamente.");
            number=parseInt(prompt("Digite o "+(i+1)+"º número."));
        }else{
            numerosJogados[i]=number;
        }

Imagine que o usuário digite o número 61. A condição do if()será verdadeira e assim será mostrado para ele a mensagem de que não pode ser esse número e será pedido pra digitar um novo número. Então digamos que o usuário digite o número 1. Perceba que agora irá funcionar e o usuário irá para digitar o segundo número. No entanto, não será adicionado o número 1 aos numerosJogados. Porque?

Simples, perceba que em seu código o número só é adicionado no numerosJogados se o if não for chamado. Porém sendo que o if() é chamado quando digitamos um numero menor que zero e maior que sessenta e então é pedido que digitemos outro número (dentro do if()), este outro numero não é adicionado. Assim par resolver isso você pode fazer da seguinte forma:

for(i = 0; i < 6; i++){
        var number=parseInt(prompt("Digite o "+(i+1)+"º número."));
        while(number < 0 || number >60 || isNaN(number)){
            alert("Número não pode ser negativo, nem maior que 60 e necessáriamente deve ser um número. Digite novamente.");
            number=parseInt(prompt("Digite o "+(i+1)+"º número."));
        }
        numerosJogados[i]=number;
    }

Perceba que para melhorar seu código, também adicionei uma 3 condição, para caso de o usuário digitar letras no lugar de números e para caso ele deixe em branco.

Espero ter ajudado! Bons Estudos!

Romário muito obrigado pela ajuda, acredite nem tinha pensando desta forma. Obrigado mesmo.