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

Me ajuda !!!

Bom dia! Fiz meu código com a opção de perguntar o valor do salário para verificar se paga ou não o IR. Porém, independente do valor que eu coloque, ele sempre me retorna que não paga imposto. O que faltou? `import java.util.Scanner;

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

    Scanner leitura = new Scanner(System.in);

    double salario = 0 , valorSalario;

    System.out.println("Qual o valor do seu salario ? ");
    valorSalario= Double.parseDouble(leitura.nextLine());

    if (salario < 1900.0) {

        System.out.println("Você não declara imposto de renda ." );

    }else if (salario >= 1900.0 && salario <= 2800.0) {

        System.out.println("O imposto de renda é de 7.5%");
        System.out.println("O valor a deduzir é de R$ 142,00");

    }else if (salario >= 2800.01 && salario <=3751.0){
        System.out.println("O imposto de renda é de 15 %");
        System.out.println("O valor a deduzir é de R$ 350,00");

    }else if (salario >= 3751.01 && salario <= 4664.00){
        System.out.println("O imposto de renda é de 22.5 %");
        System.out.println("O valor a deduzir é de R$ 636,00");

    }
}

}

`

4 respostas

Atenção na declaração de variáveis, você está declarando duas variáveis double: salário e valorSalario.

Depois está gravando o input na valorSalario, mas nos ifs está checando a variável salario apenas, que vai ser sempre 0 porque você inicializou e nunca muda. Se você declarar apenas uma, passar o valor de input pra ela e checar ela nos ifs resolve.

Também é boa prática dar um leitura.close() ao final do seu programa para fechar o Scanner.

Obrigada Guilherme. Já alterei meu código, deu certo, mas na verdade não entendi. Nesse caso não era necessário declarar as duas variáveis ?! Mas se eu quisesse declarar as duas, o que eu teria que fazer para funcionar? Se puder colocar o código vai me ajudar muto. Uma iniciante aqui falando, rsrsrs. ` Scanner leitura = new Scanner(System.in);

    double salario = 0;

    System.out.println("Qual o valor do seu salario ? ");
    salario= Double.parseDouble(leitura.nextLine());

    if (salario < 1900.0) {

        System.out.println("Você não declara imposto de renda ." );

    } if (salario >= 1900.0 && salario <= 2800.0) {

        System.out.println("A sua aliquota é de 7.5% \n Você pode deduzir até R$ 142,00");

    }else if (salario >= 2800.01 && salario <=3751.0){
        System.out.println("A sua aliquota é de 15 % \n Você pode deduzir até R$ 350,00");

    }else if (salario >= 3751.01 && salario <= 4664.00){
        System.out.println("A sua aliquota é de 22.5 % \n Você pode deduzir até R$ 636,00");

    }
}

}

`

solução!

Detalhando o fluxo do seu primeiro código, teríamos o seguinte:

double salario = 0 , valorSalario; //declara duas variáveis, ou seja, dois espaços na memória diferentes, que armazenam 2 valores, salario é inicializado = 0 e valorSalario não é inicializado.

    System.out.println("Qual o valor do seu salario ? ");
    valorSalario= Double.parseDouble(leitura.nextLine()); //Aqui você armazena o input do usuário na valorSalario

    if (salario < 1900.0) { //Aqui nos ifs, você sempre checa a variável salário, que está guardando 0 porque vocÊ inicializou ela como 0, e nunca gravou nada por cima, o valor que a salario armazena não tem nada a ver com a valorSalario, são dois espaços na memória diferentes.
        ...
    }else if (salario >= 1900.0 && salario <= 2800.0) {
        ...
    }else if (salario >= 2800.01 && salario <=3751.0){
        ...
    }else if (salario >= 3751.01 && salario <= 4664.00){
        ...
    }
    leitura.close(); //Recomendo fechar esse Scanner, ao dar um newScanner você "abre" ele, e é sempre boa pratica fechar tudo o que você abre para manter organizado

Você pode declarar duas variáveis, a sintaxe está certa, mas nesse caso não há necessidade porque você só precisa armazenar um valor, que é o input do usuário.

Cada variável é um espaço na memória que você reserva para guardar algum valor, aí você guarda ali o valor que desejar, desde que seja do mesmo tipo que reservou, e esse valor vai estar ali até que você "grave" por cima. Não é necessário reservar espaços na memória desnecessário, nesse caso só existe uma informação que você quer gravar, portanto só uma variável é necessária.

Muito obrigada!!!