Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Compilar método com "if" esta dando "illegal start of expression"

Olá, estou tentando fazer o primeiro exercício do Inicio a Orientação a Objetos, e resolvi criar um método que me retorne o salário liquido de uma pessoa após descontar o IRRF e o INSS, para isso coloquei um IF com as faixas de desconto, porém ao compilar esta dando "illegal start of expression" e mostrando cada linha de IF no prompt, por favor, o que seria?

class Funcionario {
    String nome;
    String departamento;
    double salario;
    String entradaBanco;
    String rg;
    double liquido;
    void aumenta(double aumentoSalario){
        this.salario += aumentoSalario;
    }
    void calculaGanhoAnual(){
        this.salario *= 12 ;
   }
    void salarioLiquido(){
    double irrf;
    double inss;
    if (this.salario <= 1787.77){
    irrf = 0;
    }
    if (this.salario >= 1787.78 && <= 2679.29){
    irrf = this.salario / 100 * 7.5;
    }
    if (this.salario >= 2679.30 && <= 3572.43){
    irrf = this.salario / 100 * 15;
    }
    if (this.salario >= 3572.44 && <= 4463.81){
    irrf = this.salario / 100 * 22.5;
    }
    else { 
    irrf = this.salario / 100 * 27.5;
                    }
    if (this.salario <= 1659.38){
    inss = this.salario / 100 * 8;
    }
    if (this.salario >= 1659.39 && <= 2765.66){
    inss = this.salario / 100 * 9;
    }
    else { 
    inss = this.salario / 100 * 11;
    }
    this.liquido = this.salario - irrf - inss;

       }
class Programa{           

    public static void main(String[] args) {
       Funcionario rafael = new Funcionario();
       rafael.nome = "Rafael Henrique Aguiar";
       rafael.departamento = "Qualidade";
       rafael.salario = 3990.00;
       rafael.entradaBanco = "25/02/2017";
       rafael.rg = "44.566.502-6";

    rafael liquido = salarioLiquido();
    rafael.aumenta(500);

       System.out.println(rafael.nome);

    System.out.println("R$" + rafael.salario);
        System.out.println("R$" + rafael.liquido);
    }    
}
4 respostas

Olá Henrique, faz um tempo que não programo, mas quero te dar umas dicas de programação.

se o IF tiver apenas uma instrução, não precisa de chaves, se eu n me engano o else também segue a msm regra.

Exemplo:

if( 0 > 1 ){
    return false;
}else{ 
    return true; 
}

E

if( 0 > 1 )
    return false;
else
    return true;

Importante: o if SEM chaves, só irá executar a instrução imediatamente depois dele, e sairá do if.

o if COM chaves executa o bloco { };

solução

Oi Henrique, você tentou if (this.salario >= 1787.78 && this.salario <= 2679.29) ?

("se this.salario maior igual... e this.salario menor igual..." em vez de "se this.salario maior igual... e menor igual...")

Henrique, a Thaís está certa!

Quando vc usa o if o teste sempre tem que ser completo

Ou seja, em vez disso:

    if (this.salario >= 3572.44 && <= 4463.81){

isso:

    if (this.salario >= 3572.44 &&  this.salario<= 4463.81){

Os seus testes dão erro por o a cláusula if só sabe ver se o que está dentro do parenteses é true or false , durante a execução do programa JVM vai pegar esse teste e traduzir a primeira condição e quando ela tenta a segunda não consegue pois não sabe o ela deve comparar para ver se é maior ou igual.

Corrija todos os seus if que vai ficar tudo certo!

Abs Luiz Fernando

Muito obrigado, realmente o que faltava era repassar o valor após o E.