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

Estou com dúvida no curso de Primeiros passos com Java, no exercício do capítulo Começando com Orientação a objetos.

Quando compilo da erro na linha 67, eu não consegui descobrir o motivo, se alguem puder me ajudar obrigado. Esse é meu codigo:

class Funcionario{
    String nome;
    String departamento;
    double salario;
    Data dataDeEntrada;
    String rg;

    void recebeAumento(double aumento){
        this.salario += aumento;
    }

    public double calculaGanhoAnual(){        
        return this.salario * 12;
    }

    public double calculoInss(){
        double inss = 0;

        if(this.salario <= 1247.70){
            inss = this.salario * 0.08;
        } else if(this.salario >= 1247.71 && this.salario <= 2079.50 ){
            inss = this.salario * 0.09;
        } else if(this.salario >= 2079.51 && this.salario <= 4159.00){
            inss = this.salario * 0.11;
        }

        return inss;
    }

    void mostra(){
        System.out.println("Nome: " + this.nome());
        System.out.println("Departamento: " + departamento());
        System.out.println("Dia: " + this.dataDeEntrada.dia);
        System.out.println("Mes: " + this.dataDeEntrada.mes);
        System.out.println("Ano: " + this.dataDeEntrada.ano);
        System.out.println("RG: " + this.rg());
        System.out.println("Salário Normal com Aumento: R$ " + this.salario());
        System.out.println("Valor de INSS: R$ " + this.calculoInss());
        System.out.println("Ganho Anual: R$ " + this.calculaGanhoAnual());
        System.out.println(" ");
    }
}

class Data{
    int dia;
    int mes;
    int ano;

    void preencheData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

class ProgramaFuncionario{
    public static void main(String[] args){
        Funcionario f1 = new Funcionario();
        Data dataEntrada = new Data();

        f1.nome("Marciano Olinski");
        f1.departamento("Desenvolvimento");
        f1.dataEntrada.preencheData(17, 9, 2013);
        f1.rg("4.563.213");
        f1.salario(1000.0);
        f1.recebeAumento(300.0);

        f1.mostra();        

    }
}
2 respostas
solução!

Olá! Eu fiz as correções necessárias em seu código comentando todas as linhas que estavam incorretas, escrevendo o código correto e dando uma pequena explicação. Você cometeu uma série de errinhos, incluindo esquecer de fechar as chaves da declaração da classe Data, e isso estava gerando um monte de erros de compilação.

Por favor leia cuidadosamente o código abaixo, comparando o código que você escreveu (que está comentado) com o código correto que eu escrevi. Também leia com atenção os comentários no código pois eu os escrevi para tentar clarear suas dúvidas. Assim acho que você poderá entender bem o assunto.

Um abraço!

class Funcionario {
    String nome;
    String departamento;
    double salario;
    Data dataDeEntrada;
    String rg;

    public void recebeAumento(double aumento){
        this.salario += aumento;
    }

    public double calculaGanhoAnual(){        
        return this.salario * 12;
    }

    public double calculoInss(){
        double inss = 0;

        if(this.salario <= 1247.70){
            inss = this.salario * 0.08;
        } else if(this.salario >= 1247.71 && this.salario <= 2079.50 ){
            inss = this.salario * 0.09;
        } else if(this.salario >= 2079.51 && this.salario <= 4159.00){
            inss = this.salario * 0.11;
        }

        return inss;
    }

    void mostra(){
        //System.out.println("Nome: " + this.nome());
        // O jeito correto para imprimir o nome, já que você não definiu
        // um método nome(), é esse:
        System.out.println("Nome: " + this.nome);

        //System.out.println("Departamento: " + departamento());
        // O jeito correto para imrimir o departamento, já que você não definiu
        // um método departamento(), é esse:
        System.out.println("Departamento: " + this.departamento);

        System.out.println("Dia: " + this.dataDeEntrada.dia);
        System.out.println("Mes: " + this.dataDeEntrada.mes);
        System.out.println("Ano: " + this.dataDeEntrada.ano);

        //System.out.println("RG: " + this.rg());
        // O jeito correto para imprimir o RG, já que você não definiu um
        // método rg(), é esse:/ ATENÇÃO: aqui você esqueceu de fechar as chaves para a cl
        System.out.println("RG: " + this.rg);

        //System.out.println("Salário Normal com Aumento: R$ " + this.salario());
        // O jeito correto para imprimir o salário, já que você não definiu um
        // método salario(), é esse:
        System.out.println("Salário Normal com Aumento: R$ " + this.salario);

        System.out.println("Valor de INSS: R$ " + this.calculoInss());
        System.out.println("Ganho Anual: R$ " + this.calculaGanhoAnual());
        System.out.println(" ");
    }
}

class Data{
    int dia;
    int mes;
    int ano;

    void preencheData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }
// ATENÇÃO: aqui você esqueceu de fechar as chaves para a classe Data,
// então estou acrescentando a linha abaixo para fechar a classe:
}

class ProgramaFuncionario {
    public static void main(String[] args){
        Funcionario f1 = new Funcionario();
        //Data dataEntrada = new Data();
        // O jeito correto para criar um novo objeto Data, já que o objeto
        // Funcionario contém um abributo de uma outra classe é o seguinte:
        // depois de criar um novo objeto funcionário (o f1 que você criou
        // acima):
        f1.dataDeEntrada = new Data();

        //f1.nome("Marciano Olinski");
        // O jeito correto de atribuir o nome, já que você não está
        // chamando um método, é:
        f1.nome = "Marciano Olinski";

        //f1.departamento("Desenvolvimento");
        // O jeito correto de atribuir o departamento, já que você não está
        // chamando um método, é:
        f1.departamento = "Desenvolvimento";

        //f1.dataEntrada.preencheData(17, 9, 2013);
        // Na linha de cima você chamou um método para atribuir a data,
        // mas você não tinha inicializado o objeto corretamente. Então o
        // correto é o seguinte:
        f1.dataDeEntrada.preencheData(17, 9, 2013);

        //f1.rg("4.563.213");
        // O jeito correto de atribuir o RG, já que você não está
        // chamando um método, é:
        f1.rg = "4.563.213";

        //f1.salario(1000.0);
        // O jeito correto de atribuir o salário, já que você não está
        // chamando um método, é:
        f1.salario = 1000.0;

        f1.recebeAumento(300.0);

        f1.mostra();        

    }
}

Depois que você compilar o código acima, a saída é a seguinte:

[abrantesasf@laptop]> java ProgramaFuncionario
Nome: Marciano Olinski
Departamento: Desenvolvimento
Dia: 17
Mes: 9
Ano: 2013
RG: 4.563.213
Salário Normal com Aumento: R$ 1300.0
Valor de INSS: R$ 117.0
Ganho Anual: R$ 15600.0

Muito Obrigado pela ajuda, fiz uma bagunça mesmo no código, mas muito obrigado mesmo por ter me mostrado onde eu tinha errado, já compilei e funcionou tudo, valeu.