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

Alguém me diz pq com esse salario, ele só me volta o else?

public class AliquotaComIfs { public static void main(String[] args) {

    double salario =2801;
    if (salario >= 1900 && salario <= 2800) {
        System.out.println("O valor deduzido será de R$142.");
        if (salario > 2800 && salario <= 3751)
            System.out.println("O valor deduzido será de R$350.");
        if (salario > 3751.01)
            System.out.println("O valor deduzido será de R$636.");

    }else {
            System.out.println("Não será deduzido nenhum valor.");
    }
}

}

6 respostas

E se eu coloco os ifs separados, ele me volta o if certo, mas também me volta o else, sendo que não deveria voltar

public class AliquotaComIfs { public static void main(String[] args) {

    double salario =2801;
    if (salario >= 1900 && salario <= 2800) {
        System.out.println("O valor deduzido será de R$142.");}
        if (salario > 2800 && salario <= 3751) {
            System.out.println("O valor deduzido será de R$350.");}
        if (salario > 3751.01) {
            System.out.println("O valor deduzido será de R$636.");}

    else {
            System.out.println("Não será deduzido nenhum valor.");
    }
}

}

Olá Marcos,

nessa instrução

    double salario =2801;
    if (salario >= 1900 && salario <= 2800)

está sendo verificado se salário é maior ou igual que 1900 E menor ou igual a 2800. Considerando que o salário é 2801, então a instrução retorna false

Por isso está entrando no else.

sim, mas o código não deveria voltar só um if OU só o else? no segundo código que coloquei como resposta, ele funciona melhor, mas ainda sim ele tá voltando o IR correto, mas também esta voltando o else, eu n to entendo pq ele ta voltando os 2

Olá Marcos,

entendi a dúvida. Na verdade vc testa 3 veezes.

  • na primeira retorna false
  • na segunda retorna true
  • na terceira retorna false aí ele entra no else.

Veja abaixo =)

        int salario = 2801;
        if (salario >= 1900 && salario <= 2800) {
            System.out.println("O valor deduzido será de R$142.");
        }
        if (salario > 2800 && salario <= 3751) {
            System.out.println("O valor deduzido será de R$350.");
        }

        if (salario > 3751.01) {
            System.out.println("O valor deduzido será de R$636.");
        } else {
            System.out.println("Não será deduzido nenhum valor.");
        }

Sugestão:

Ou vc coloca else if ou utiliza somente if


// com else if
        int salario = 2801; // variavel deveria ser double
        if (salario >= 1900 && salario <= 2800) {
            System.out.println("O valor deduzido será de R$142.");
        } else if (salario > 2800 && salario <= 3751) {
            System.out.println("O valor deduzido será de R$350.");
        } else if (salario > 3751.01) {
            System.out.println("O valor deduzido será de R$636.");
        } else {
            System.out.println("Não será deduzido nenhum valor.");
        }

// somente if

        if (salario >= 1900 && salario <= 2800) {
            System.out.println("O valor deduzido será de R$142.");
        } 

        if (salario > 2800 && salario <= 3751) {
            System.out.println("O valor deduzido será de R$350.");
        }

        if (salario > 3751.01) {
            System.out.println("O valor deduzido será de R$636.");
        } 

        if (salario < 1900) {
            System.out.println("Não será deduzido nenhum valor.");
        }    

entendi que seu codigo da certo, mas ainda nao entendi pq o meu n funciona ;-;, pq o programa me retorna um if e else? nao deveria retornar somente um dos dois?

solução!
    int salario = 2801;
    // Aqui vc está testando a condição, que retorna false 
    if (salario >= 1900 && salario <= 2800) {
        System.out.println("O valor deduzido será de R$142.");
    }

    // Aqui retorna true, já que salário é maior que 2800
    if (salario > 2800 && salario <= 3751) {
        System.out.println("O valor deduzido será de R$350.");
    }

    // Aqui retorna false, porém como vc utilizou um else
    if (salario > 3751.01) {
        System.out.println("O valor deduzido será de R$636.");
    } else {
        // o fluxo passará por aqui tbm.
        System.out.println("Não será deduzido nenhum valor.");
    }

    /*
     * Como disse anteriormente, fazendo assim vc acaba testando true duas vezes.
     * 
     * O melhor seria ou utilizar if...else ou somente if
     */

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software