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

Lógica - O que está errado?

No meu código abaixo, quando entro com a instrução de 18 e s (na primeira e segunda resposta) aparece como resultado o esperado mas mesmo assim lê o else. Se a resposta for <18 e N, não lê o else.

Onde estou errado?

<!DOCTYPE html>
<html lang="PT-br">
<head>
    <meta charset="UTF-8">
    <title>Será que posso dirigir?</title>
</head>
<body>

    <script>

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

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

        var idade = parseInt(prompt("Entre com a sua idade: "));
        var temCarteira = prompt("Tem Carteira? Responda S ou N");

        if (idade >= 18 && (temCarteira == "S" || temCarteira == "s")){
            mostra("Pode dirigir!");
        }
        if (idade < 18 && (temCarteira == 'N' || temCarteira == 'n')){
            mostra("Não pode dirigir!");
        }
        else {
            mostra("Erro! Faça novamente!");
        }

    </script>

</body>
</html>
2 respostas
solução!

Olá amigo. Ocorre aí que o seu segundo if deveria estar dentro de um else:

Veja se resolve:

if (idade >= 18 && (temCarteira == "S" || temCarteira == "s")){
            mostra("Pode dirigir!");
        }
        else { 
        if (idade < 18 && (temCarteira == 'N' || temCarteira == 'n')){
            mostra("Não pode dirigir!");
            }
            else {
                mostra("Erro! Faça novamente!");
            }
    }

Sugestão de uma nova lógica:
if (idade < 18) || (idade >= 18 && temCarteira = 'N') || (idade >= 18 && temCarteira = 'n') {
            mostra("Não Pode dirigir!");
}
else {
    mostra("Pode dirigir!");
}

Entendo que somente o fato de ser menor de 18 anos ou maior de 18 anos sem habilitação já faz com que garanta que não pode dirigir. Em demais casos, estaria apto a dirigir. Faz um teste?
Abraços.

Obrigado Ricardo. Deu certinho agora.