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

public String getNome()

Não consigo fazer esse getter funcionar:

public String getNome() {
        return this.nome;
    }

porém o código abaixo funciona pra mim:

public void setNome(String nome) {
        this.nome = nome;
    }

Como eu faço o getter funcionar no meu código?

Segue abaixo o meu código:

class Funcionario{
    private String nome;
    public int idade;
    public String cargo;
    private double salario;
    public Data dataEntrada;

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void mostra(){
        System.out.println("Nome: " + this.nome);
        System.out.println("Idade: " + this.idade);
        System.out.println("Data de entrada: " + this.dataEntrada.getDataEntrada());
        System.out.println("Cargo : " + this.cargo);
        System.out.println("Salario: " + this.salario);
        System.out.println("Salario anual: " + this.getSalarioAnual());        
        System.out.println("\n");
    }

    private void aumentoSalario(double quantidade){
        this.salario = this.salario += quantidade;
    }

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

    public void getSalario(double novoSalario){
        this.salario = novoSalario;
    }

    public void getAumentoSalario(double novoSalario){
        this.salario = this.salario + novoSalario + 200;
    }
}

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

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

    public String getDataEntrada(){
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}


class Empresa{
    private Funcionario[] empregados = new Funcionario[3];
    private int vagas = 0;

    public void adiciona(Funcionario f){
        this.empregados[this.vagas] = f;
        vagas++;
    }

    public void mostraTodosAsInformacoes(){
        for(int i = 0; i < this.vagas; i++){
            System.out.println("Funcionario: " + i);
            this.empregados[i].mostra();
        }
    }


    public Funcionario getEmpregados(int i){
        return this.empregados[i];
    }
}

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

        Empresa banco = new Empresa();


        Funcionario matheus = new Funcionario();
        matheus.dataEntrada = new Data();
        matheus.setNome("matheus de wit");
        matheus.idade = 26;
        matheus.dataEntrada.preencheData(01, 02 , 2015);
        matheus.cargo = "Caixa";
        matheus.getSalario(1500.0);
        matheus.getAumentoSalario(500.0);

        banco.adiciona(matheus);

        Funcionario adriano = new Funcionario();
        adriano.dataEntrada = new Data();
        adriano.setNome("Adriano dos Santos");
        adriano.idade = 35;
        adriano.dataEntrada.preencheData(02, 04 , 2012);
        adriano.cargo = "Geremte";
        adriano.getSalario(2000.0);
        adriano.getAumentoSalario(200.0);

        banco.adiciona(adriano);

        banco.mostraTodosAsInformacoes();
    }
}
4 respostas

Não entendi o que você quis dizer com o getter funcionar. Pode explicar melhor?

Você precisar criar o getNome dentro da classe Funcionario, do jeito que você definiu na pergunta. Acredito que você esteja definindo em outro local, fazendo sentido não funcionar.

Ola, você precisa criar o metodo getNome na classe "Funcionario", por que o nome faz parte da classe "Funcionario" sua classe deveria ficar assim

public class Funcionario {

    private String nome;
    public int idade;
    public String cargo;
    private double salario;
    public Data dataEntrada;

    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getNome() {
        return this.nome;
    }

    public void mostra() {
        System.out.println("Nome: " + this.nome);
        System.out.println("Idade: " + this.idade);
        System.out.println("Data de entrada: " + this.dataEntrada.getDataEntrada());
        System.out.println("Cargo : " + this.cargo);
        System.out.println("Salario: " + this.salario);
        System.out.println("Salario anual: " + this.getSalarioAnual());
        System.out.println("\n");
    }

    private void aumentoSalario(double quantidade) {
        this.salario = this.salario += quantidade;
    }

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

    public void getSalario(double novoSalario) {
        this.salario = novoSalario;
    }

    public void getAumentoSalario(double novoSalario) {
        this.salario = this.salario + novoSalario + 200;
    }
}
solução!

Oi Matheus eu identifiquei vários equívocos no seu código, primeiro vamos começar revendo o seguinte:

O modificador private faz com que ninguém consiga modificar, nem mesmo ler, o atributo em questão. Com isso, temos um problema: como fazer para mostrar o nome de um Funcionário, já que nem mesmo podemos acessá-lo para leitura?

Precisamos então arranjar uma maneira de fazer esse acesso. Sempre que precisamos arrumar uma maneira de fazer alguma coisa com um objeto, utilizamos de métodos! Vamos então criar um método, digamos pegaNome, para realizar essa simples tarefa:

public double pegaNome() {
    return this.nome;
  }

E para acessarmos faríamos:

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

        Empresa banco = new Empresa();
        Funcionario matheus = new Funcionario();
        matheus.setaNome("Nome");
         matheus.pegaNome();

Para permitir o acesso aos atributos (já que eles são private) de uma maneira controlada, a prática mais comum é criar dois métodos, um que retorna o valor e outro que muda o valor.

A convenção para esses métodos é de colocar a palavra get ou set antes do nome do atributo. Por exemplo, a nosso Funcionário com nome, idade e cargo fica assim, no caso da gente desejar dar acesso a leitura e escrita a todos os atributos:

public String getNome() {
    return this.nome;
  }

  public void setSaldo(String  nome) {
    this.nome= nome;
  }

  public int getIdade() {
    return this.idade;
  }

  public void setIdade(int idade) {
    this.idade = idade;
  }

  public String  getCargo() {
    return this.cargo;
  }

  public void setCargo(String  cargo) {
    this.cargo = cargo;
  }

Eu comentei o seu código pra você arrumar segue abaixo:

class Funcionario{
    private String nome;
    public int idade; \\atributos devem ser privates para não permitirem o acesso direto
    public String cargo;
    private double salario;
    public Data dataEntrada;

    public void setNome(String nome) {
        this.nome = nome;
    }

\\Faltou implementar o getNome() aqui para pegar o nome do Funcionario.

    public void mostra(){
        System.out.println("Nome: " + this.nome);
        System.out.println("Idade: " + this.idade);
        System.out.println("Data de entrada: " + this.dataEntrada.getDataEntrada());
        System.out.println("Cargo : " + this.cargo);
        System.out.println("Salario: " + this.salario);
        System.out.println("Salario anual: " + this.getSalarioAnual());        
        System.out.println("\n");
    }

    private void aumentoSalario(double quantidade){
        this.salario = this.salario += quantidade;
\\A atribuição está errada o correto seria 
this.salario += quantidade;
    }

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

    public void getSalario(double novoSalario){
        this.salario = novoSalario;
    }

    public void getAumentoSalario(double novoSalario){
        this.salario = this.salario + novoSalario + 200;
\\faltou o return
    }
}

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

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

    public String getDataEntrada(){
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}


class Empresa{
    private Funcionario[] empregados = new Funcionario[3];
    private int vagas = 0;

    public void adiciona(Funcionario f){
        this.empregados[this.vagas] = f;
        vagas++;
    }

    public void mostraTodosAsInformacoes(){
        for(int i = 0; i < this.vagas; i++){
            System.out.println("Funcionario: " + i);
            this.empregados[i].mostra();
        }
    }


    public Funcionario getEmpregados(int i){
        return this.empregados[i];
    }
}

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

        Empresa banco = new Empresa();


        Funcionario matheus = new Funcionario();
        matheus.dataEntrada = new Data();
        matheus.setNome("matheus de wit");
        matheus.idade = 26;\\setIdade()
        matheus.dataEntrada.preencheData(01, 02 , 2015);
        matheus.cargo = "Caixa";
        matheus.getSalario(1500.0);\\set e não get
        matheus.getAumentoSalario(500.0);\\get é pra pegar não pra setar

        banco.adiciona(matheus);

        Funcionario adriano = new Funcionario();
        adriano.dataEntrada = new Data();
        adriano.setNome("Adriano dos Santos");
        adriano.idade = 35;
        adriano.dataEntrada.preencheData(02, 04 , 2012);
        adriano.cargo = "Geremte";
        adriano.getSalario(2000.0);
        adriano.getAumentoSalario(200.0);

        banco.adiciona(adriano);

        banco.mostraTodosAsInformacoes();
    }
}