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

Resolução alternativa

Olá, boa noite a todos! Criei uma solução alternativa, pois entendo que no exercicio temos duas condições em caso de maior de 18, uma se ele tem mais de 18 e possui CNH, e a segunda se ele tem mais de 18 e não possui CNH.

Porem, não sei se escrevi o código da maneira mais limpa possível.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Posso dirigir?</title>
</head>
<body>
    <script>
        function pulaLinha(){
            document.write("<br");
        }

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

        var idade = parseInt(prompt("Informe sua idade?"))
        var temHabilitacao = prompt("Possui Habilitação? Responsa S ou N");

        if( idade >= 18 && temHabilitacao == "S"){
            mostra("Você pode dirigir tranquilamente!")
        }
        if (idade >= 18 && temHabilitacao == "N"){
            mostra("Voce precisa tirar sua habilitação")
        }
        else {
            mostra("Você não pode dirigir, espere sua vez.")
        }

    </script>
</body>
</html>
7 respostas

Tem um errinho na lógica do if/else. O else tbem é chamado se entrar no primeiro if, imprimindo q nao pode dirigir msm qdo pode. Teria que fazer algo do tipo:

        if( idade >= 18){
                if(temHabilitacao == "S"){
                    mostra("Você pode dirigir tranquilamente!")            
            } else {
             mostra("Voce precisa tirar sua habilitação")  
            }
        } else {
            mostra("Você não pode dirigir, espere sua vez.")
        }

Olá Ricardo, bom dia! Primeiramente obrigado por seu feedback. Mas o programa está entrando direto no else no caso da não utilização de letra maiúscula.

Para evitar esse tipo de bug implementei o toUpperCase(). Se puder realizar um novo teste, agradeço a ajuda.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Posso dirigir?</title>
</head>
<body>
    <script>
        function pulaLinha(){
            document.write("<br");
        }

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

        var idade = parseInt(prompt("Informe sua idade?"))
        var temHabilitacao = prompt("Possui Habilitação? Responsa S ou N");

        if( idade >= 18 && temHabilitacao.toUpperCase() == "S"){
            mostra("Você pode dirigir tranquilamente!")
        }
        if (idade >= 18 && temHabilitacao.toUpperCase() == "N"){
            mostra("Voce precisa tirar sua habilitação")
        }
        else {
            mostra("Você não pode dirigir, espere sua vez.")
        }

    </script>
</body>
</html>
solução!

Na verdade o problema é que vc faz um if seguido do outro, o resultado quando idade = 18 e habilitacao = S dá:

Você pode dirigir tranquilamente!Você não pode dirigir, espere sua vez.

poderia colocar um elseif no lugar do segundo if:

        if( idade >= 18 && temHabilitacao.toUpperCase() == "S"){
            mostra("Você pode dirigir tranquilamente!")
        } else if (idade >= 18 && temHabilitacao.toUpperCase() == "N"){
            mostra("Voce precisa tirar sua habilitação")
        }  else {
            mostra("Você não pode dirigir, espere sua vez.")
        }

Rodrigo, nesse caso aí, seguindo a lógica da sua estrutura condicional, eu poderia por exemplo suprimir o último else e no else anterior já exibir a mensagem ao usuário? Assim consigo um código um pouco mais enxuto. É válido?

        if( idade >= 18 && temHabilitacao.toUpperCase() == "S"){
            mostra("Você pode dirigir tranquilamente!")
        } else if (idade >= 18 && temHabilitacao.toUpperCase() == "N"){
            mostra("Voce precisa tirar sua habilitação")
            mostra("Você não pode dirigir, espere sua vez.")
        }  

Na verdade assim vc não mostraria a mensagem para os que tem menos de 18 anos.

Opa Rodrigo, obrigado pela explicação. Eu tentei implementar de acordo com o que foi passado no curso, não foi mostrado o else if ainda.

Mas obrigado pela apresentação da instrução. Pelo que entendi, o else if, permite encadear um novo bloco de instrução condicional.

Verdade Rodrigo, entendi. Mas penso que nesse caso não se faz obrigatório o uso do último else porque já é determinado por lei que não é possível menor de 18 ser habilitado.

Sendo assim você pode inserir um if no começo para avaliar se ele tem menos de 18 e já avisar que não pode dirigir.

 if( idade < 18){
            mostra("Você não pode dirigir: menor de 18 anos!")
        } else  if( idade >= 18 && temHabilitacao.toUpperCase() == "S"){
            mostra("Você pode dirigir tranquilamente!")
        } else if (idade >= 18 && temHabilitacao.toUpperCase() == "N"){
            mostra("Voce precisa tirar sua habilitação")
            mostra("Você não pode dirigir, espere sua vez.")
        }