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

Carteira: if if ou if &&

Ola, sobre o exercício da carteira, se eu escrevo como abaixo, quando respondo uma idade abaixo de 18 anos ele nao me retorna nada. Mas se respondo 18 e N ele diz que nao posso dirigir.

<meta charset="UTF-8">

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

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

    var idade = parseInt(prompt("Qual é sua idade?"));
    var temCarteira = prompt("Tem carteira? Responda S ou N");

    if(idade >= 18) {
        if(temCarteira == "S" || temCarteira == "s")    {            
                mostra("Pode dirigir");
        }     else {
                mostra("Não pode dirigir");

                } }

</script>insira seu código aqui

Porém se escrevo o código abaixo, ele me retorna corretamente para qq resposta que eu dê. Entao eu gostaria de saber se tem algo errado no código acima, ou se o if do if, e o if + && tem funcoes diferentes. Pois, pela explicação me pareceu opcional usar de um modo ou de outro.

<meta charset="UTF-8">

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

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

    var idade = parseInt(prompt("Qual é sua idade?"));
    var temCarteira = prompt("Tem carteira? Responda S ou N");

    if(idade >= 18 && temCarteira == "S" || temCarteira == "s")    {            
                mostra("Pode dirigir");
        }     else {
                mostra("Não pode dirigir");

                } 

</script>
3 respostas

Olá Ana!

Se você digita 18 ele entra no primeiro IF:

if(idade >= 18) {

Abaixo dele você tem a seguinte verificação:

if(temCarteira == "S" || temCarteira == "s")    {

Onde: Se você digitar "S" ou "s" ele irá retornar: ""Pode dirigir"

Se você digitar qualquer outro caractere ele irá entrar no ELSE e irá exibir: "Não pode dirigir".

Repara que no seu primeiro IF você só ta testando se é o número 18 ou não, por isso se você digitar qualquer outro número ele não entra no IF e consequentemente não irá fazer nada.

Já no segundo código:

if(idade >= 18 && temCarteira == "S" || temCarteira == "s")    {

Você inclui a verificação da idade junto de outras verificações, isso faz com que sempre apareça algo se o resultado for True ou False.

Espero que tenha ajudado!

Bons estudos! ^^

Olá, obrigada pela resposta, mas ainda nao compreendi direito. Para mim as duas sentenças sao iguais, com If If ou &&, as duas fariam primeiro a verificação da idade. Entao porque na If If se ponho abaixo de 18 nada aparece continua sem explicação para mim, faria sentido se na sentença do && tambem nao aparecesse.

solução!

Olá Ana!

As duas fazem a verificação da idade mas somente a primeira faz SOMENTE da idade. A segunda faz mais verificações e isso muda o fluxo dependendo da resposta.

Todo if converte o que tem dentro dele para uma expressão booleana do tipo TRUE ou FALSE.

Por exemplo:

if(10>18) -> Isso é o mesmo que isso -> if(false)

Logo não irá entrar dentro da estrutura.

Agora falando sobre seu código...

Veja, na primeira temos isso:

if(idade >= 18) {

Só verificamos se a idade é maior ou igual a 18 e isso nos retorna TRUE ou FALSE.

Já na segunda temos isso:

if(idade >= 18 && temCarteira == "S" || temCarteira == "s")    {    

Então precisamos fazer mais verificações pra saber se irá retornar True ou False:

  • Precisamos saber se a idade é maior ou igual a 18
  • E junto a isso, precisamos saber se a variavel temCarteira é igual a "S" OU igual a "s" .

Observe que temos duas expressões que juntas deverão retornar True ou False.

Logo ele não compara a idade primeiro, ele faz toda a expressão, porém como você utiliza o operador && ele só entrará dentro da estrutura se as duas condições forem verdadeiras.

Nos primeiro caso se você digita um número abaixo de 18 ele não irá printar nada pois não irá entrar dentro da estrutura (e essa estrutura que está dentro é um outro IF para a carteira, onde nela que você escreve algo na tela, logo, se você não passar da primeira estrutura não chegará na interna)

Já no segundo caso você faz o teste já na mesma condicional e não tem um IF dentro do outro. Logo se ele não passar ele já cairá no else que é onde você escreve "Não pode dirigir" na tela.