12
respostas

Dúvida Exercício 3 Aula 4 Arrays.

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

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

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

    public void mostra(){
            System.out.println("Nome: " + this.nome);
            System.out.println("Departamento: " + this.departamento);
            System.out.println("Salario: R$" + this.salario);
            System.out.println("Data de entrada: " + this.dataDeEntrada.getFormatada());
            System.out.println("RG: " + this.rg);
            System.out.println("Ganho anual: R$" + this.calculaGanhoAnual() + "\n");
    }
}
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;
    }
        String getFormatada() {
        return this.dia + "/" + this.mes + "/" + this.ano;
        }
}
class Empresa {
        String nomeEmpresa;
        String cnpj;
        Funcionario[] funcionarios;
        int livre = 0;

    public void adicionaFuncionario(Funcionario f) {
        this.funcionarios[this.livre] = f;
        this.livre++;
    }

     void getEmpresa() {
        System.out.println("Empresa: " + this.nomeEmpresa);
    }
}
class TestaEmpresa {
         public static void main (String[] args) {
                Empresa empresa = new Empresa();
                empresa.nomeEmpresa = "Testers for TI";
                empresa.cnpj = "094.847.958/0001-88";

                empresa.funcionarios = new Funcionario[10];

                Funcionario f1 = new Funcionario();
                f1.dataDeEntrada = new Data();

                f1.nome = "Cameron Dias";
                f1.nomeEmpresa = empresa;
                f1.departamento = "TI";
                f1.salario = 4000;
                f1.dataDeEntrada.preencheData(5, 10, 1989);
                f1.rg = "6814975-8";
                empresa.adicionaFuncionario(f1);
                f1.getEmpresa();
                f1.mostra();

                Funcionario f2 = new Funcionario();
                f2.dataDeEntrada = new Data();

                f2.nome = "Robert Richards";
                f2.nomeEmpresa = empresa;
                f2.departamento = "TI";
                f2.salario = 3700;
                f2.dataDeEntrada.preencheData(8, 6, 1995);
                f2.rg = "6187204-7";
                empresa.adicionaFuncionario(f2);
                f2.mostra();
            }
        }

Estou tendo muita dificuldade pra entender esse assunto... enfim.

ERRO: Funcionario.java:66: error: cannot find symbol f1.nomeEmpresa = empresa;

symbol: variable nomeEmpresa location: variable f1 of type Funcionario Funcionario.java:72: erroe: cannot find symbol f1.getEmpresa();

symbol: method getEmpresa() location: variable f1 of type Funcionario Funcionario.java:79: error: cannot find symbol f1.nomeEmpresa = empresa;

symbol: variable nomeEmpresa location: variable f2 of type Funcionario 3 errors

Obrigado pessoal

12 respostas

Opa beleza?

Seu erro é bastante simples na verdade, olha oque você está fazendo.

 Funcionario f1 = new Funcionario();

Aqui você instanciou um funcionario, e criou uma variavel que a ponta para o Funcionario, com isso feito você pode pegar essa varivel e acessar a Classe Funcionario, pegando seus atributos e metodos.

Então quando isso é feito, você faz.

 f1.nomeEmpresa = empresa;

Você está com acessando a classe Funcionario através da sua variavel f1, mais repara que na classe Funcionario você não tem nenhum atributo do tipo nomeEmpresa.

Apaga essa linha que deve rodar o seu código.

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

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

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

    public void mostra(){
            System.out.println("Nome: " + this.nome);
            System.out.println("Departamento: " + this.departamento);
            System.out.println("Salario: R$" + this.salario);
            System.out.println("Data de entrada: " + this.dataDeEntrada.getFormatada());
            System.out.println("RG: " + this.rg);
            System.out.println("Ganho anual: R$" + this.calculaGanhoAnual() + "\n");
    }
}
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;
    }
        String getFormatada() {
        return this.dia + "/" + this.mes + "/" + this.ano;
        }
}
class Empresa {
        String nomeEmpresa;
        String cnpj;
        Funcionario[] funcionarios;
        int livre = 0;

    public void adicionaFuncionario(Funcionario f) {
        this.funcionarios[this.livre] = f;
        this.livre++;
    }

     void getEmpresa() {
        System.out.println("Empresa: " + this.nomeEmpresa);
    }
}
class TestaEmpresa {
         public static void main (String[] args) {
                Empresa empresa = new Empresa();
                empresa.nomeEmpresa = "Testers for TI";
                empresa.cnpj = "094.847.958/0001-88";

                empresa.funcionarios = new Funcionario[10];

                Funcionario f1 = new Funcionario();
                f1.dataDeEntrada = new Data();

                f1.nome = "Cameron Dias";
                //f1.nomeEmpresa = empresa;
                f1.departamento = "TI";
                f1.salario = 4000;
                f1.dataDeEntrada.preencheData(5, 10, 1989);
                f1.rg = "6814975-8";
                empresa.adicionaFuncionario(f1);
                //f1.getEmpresa();
                f1.mostra();

                Funcionario f2 = new Funcionario();
                f2.dataDeEntrada = new Data();

                f2.nome = "Robert Richards";
                //f2.nomeEmpresa = empresa;
                f2.departamento = "TI";
                f2.salario = 3700;
                f2.dataDeEntrada.preencheData(8, 6, 1995);
                f2.rg = "6187204-7";
                empresa.adicionaFuncionario(f2);
                f2.mostra();
            }
        }

@Alisson, boa noite!

Sim, funcionou. Porém, como faço para atribuir a empresa para a qual o funcionario pertence e mostrar isso em tela?

Você pode criar uma variável dentro do Funcionario que vai receber uma empresa.

public Empresa empresaDoFuncionario;

public void setEmpresa(Empresa empresa){
    this.empresaDoFuncionario = empresa;
}
public Empresa getEmpresa(){
    return this.empresaDoFuncionario;
}

--Podendo colocar isso no construtor no futuro.

Não entendi Lucas, fiz aqui e não consegui...

Pode colar no meu código pra ficar melhor a visualização?

Desculpe minha incapacidade, realmente estou com dificuldades rsrs

valeu

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

public void setEmpresa(Empresa empresa){
    this.empresaDoFuncionario = empresa;
}
public Empresa getEmpresa(){
    return this.empresaDoFuncionario;
}
    void recebeAumento(double valorDoAumento){
        this.salario += valorDoAumento;
    }

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

    public void mostra(){
            System.out.println("Nome: " + this.nome);
            System.out.println("Departamento: " + this.departamento);
            System.out.println("Salario: R$" + this.salario);
            System.out.println("Data de entrada: " + this.dataDeEntrada.getFormatada());
            System.out.println("RG: " + this.rg);
            System.out.println("Ganho anual: R$" + this.calculaGanhoAnual() + "\n");
    }
}
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;
    }
        String getFormatada() {
        return this.dia + "/" + this.mes + "/" + this.ano;
        }
}
class Empresa {
        String nomeEmpresa;
        String cnpj;
        Funcionario[] funcionarios;
        int livre = 0;

    public void adicionaFuncionario(Funcionario f) {
        this.funcionarios[this.livre] = f;
        this.livre++;
    }

     void getEmpresa() {
        System.out.println("Empresa: " + this.nomeEmpresa);
    }
}
class TestaEmpresa {
         public static void main (String[] args) {
                Empresa empresa = new Empresa();
                empresa.nomeEmpresa = "Testers for TI";
                empresa.cnpj = "094.847.958/0001-88";

                empresa.funcionarios = new Funcionario[10];

                Funcionario f1 = new Funcionario();
                f1.dataDeEntrada = new Data();

                f1.nome = "Cameron Dias";
                //f1.nomeEmpresa = empresa;
                f1.departamento = "TI";
                f1.salario = 4000;
                f1.dataDeEntrada.preencheData(5, 10, 1989);
                f1.rg = "6814975-8";
                empresa.adicionaFuncionario(f1);
                //f1.getEmpresa();
                f1.mostra();

                Funcionario f2 = new Funcionario();
                f2.dataDeEntrada = new Data();

                f2.nome = "Robert Richards";
                //f2.nomeEmpresa = empresa;
                f2.departamento = "TI";
                f2.salario = 3700;
                f2.dataDeEntrada.preencheData(8, 6, 1995);
                f2.rg = "6187204-7";
                empresa.adicionaFuncionario(f2);
                f2.mostra();
            }
        }

Você quer adicionar um funcionario para a sua empresa? Por que se for, você já está fazendo isso. Repara que você na sua Classe Empresa você tem um Array de Funcionario certo?

E você já tem um metodo dentro da Classe Empresa que adiciona o funcionario.

Aqui você tem um metodo que adiciona um funcionario a sua empresa.

 public void adicionaFuncionario(Funcionario f) {
        this.funcionarios[this.livre] = f;
        this.livre++;
    }

E aqui você está adicionando.

  empresa.adicionaFuncionario(f1);

Você quer mostrar os funcionarios que tem na empresa, isso pode ser feita de varias maneiras, mais no jeito que está o seu código é usar a orientação objeto mesmo para esse efeito.

Algo como.

empresa.funcionarios[0].mostra();

Se quiser ver o outro funcionario criado.

empresa.funcionarios[1].mostra();

Ok.. rodou certinho. Mas como faço pra declarar isso na classe TestaFuncionario?

Tentei mas não deu certo.

f1.setEmpresa();

Os erros estão após o código

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

public void setEmpresa(Empresa empresa){
    this.empresaDoFuncionario = empresa;
}
public Empresa getEmpresa(){
    return this.empresaDoFuncionario;
}
    void recebeAumento(double valorDoAumento){
        this.salario += valorDoAumento;
    }

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

    public void mostra(){
            System.out.println("Nome: " + this.nome);
            System.out.println("Departamento: " + this.departamento);
            System.out.println("Salario: R$" + this.salario);
            System.out.println("Data de entrada: " + this.dataDeEntrada.getFormatada());
            System.out.println("RG: " + this.rg);
            System.out.println("Ganho anual: R$" + this.calculaGanhoAnual() + "\n");
    }
}
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;
    }
        String getFormatada() {
        return this.dia + "/" + this.mes + "/" + this.ano;
        }
}
class Empresa {
        String nomeEmpresa;
        String cnpj;
        Funcionario[] funcionarios;
        int livre = 0;

    public void adicionaFuncionario(Funcionario f) {
        this.funcionarios[this.livre] = f;
        this.livre++;
    }
}
class TestaEmpresa {
         public static void main (String[] args) {
                Empresa empresa = new Empresa();
                empresa.nomeEmpresa = "Testers for TI";
                empresa.cnpj = "094.847.958/0001-88";

                empresa.funcionarios = new Funcionario[10];

                Funcionario f1 = new Funcionario();
                f1.dataDeEntrada = new Data();

                f1.nome = "Cameron Dias";
                f1.setEmpresa();
                f1.departamento = "TI";
                f1.salario = 4000;
                f1.dataDeEntrada.preencheData(5, 10, 1989);
                f1.rg = "6814975-8";
                empresa.adicionaFuncionario(f1);
                f1.getEmpresa();
                f1.mostra();

                Funcionario f2 = new Funcionario();
                f2.dataDeEntrada = new Data();

                f2.nome = "Robert Richards";
                //f2.nomeEmpresa = empresa;
                f2.departamento = "TI";
                f2.salario = 3700;
                f2.dataDeEntrada.preencheData(8, 6, 1995);
                f2.rg = "6187204-7";
                empresa.adicionaFuncionario(f2);
                f2.mostra();
            }
        }

Erro:

Funcionario.java:69: error: method setEmpresa in class Funcionario cannot be applied to given types; f1.setEmpresa();

required: Empresa found: no arguments reason: actual and formal arujment lists differ in length 1 error

Obrigado

Olá Alisson!

Se você tirar o comentário do comando abaixo e tentar compilar o meu código, você terá erro.

//f2.nomeEmpresa = empresa;

Na verdade, o que eu quero é adicionar o nome da empresa ao funcionario da qual ele pertence. Fato do qual não consigo como post acima.

Tipo, eu quero pelo metodo get informar que o f1 trabalha na empresa "Testers for TI". Seja por metodo ou atribuição direta...

Já para atribuir rg, salario, departamento etc eu consegui sem problema, exceto o nome da empresa.

Bruno você já está fazendo isso, já tem um nome de uma empresa.

 Empresa empresa = new Empresa();
                empresa.nomeEmpresa = "Testers for TI";
                empresa.cnpj = "094.847.958/0001-88";

Aqui você já passou o nome da empresa e até o cnpj, e tá adicionando a essa empresa 2 funcionarios.

Você já ta passando o nome da empresa amigo.

Você tem que colocar a empresa dentro do setEmpresa().

funcionario1.setEmpresa(empresa);

(desculpa por demorar a responder)

Outra coisa, revisa como métodos e parâmetros funcionam, você não está colocando os parâmetros dentro das funções.

Olá Lucas!

ok, agora compilou sem erros. Mas não está aparecendo o nome da empresa que eu atribui.

empresa.nomeEmpresa = "Testers for TI";

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

public void setEmpresa(Empresa empresa){
    this.empresaDoFuncionario = empresa;
}
public Empresa getEmpresa(){
    return this.empresaDoFuncionario;
}
    void recebeAumento(double valorDoAumento){
        this.salario += valorDoAumento;
    }

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

    public void mostra(){
            System.out.println("Nome: " + this.nome);
            System.out.println("Departamento: " + this.departamento);
            System.out.println("Salario: R$" + this.salario);
            System.out.println("Data de entrada: " + this.dataDeEntrada.getFormatada());
            System.out.println("RG: " + this.rg);
            System.out.println("Ganho anual: R$" + this.calculaGanhoAnual() + "\n");
    }
}
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;
    }
        String getFormatada() {
        return this.dia + "/" + this.mes + "/" + this.ano;
        }
}
class Empresa {
        String nomeEmpresa;
        String cnpj;
        Funcionario[] funcionarios;
        int livre = 0;

    public void adicionaFuncionario(Funcionario f) {
        this.funcionarios[this.livre] = f;
        this.livre++;
    }
}
class TestaEmpresa {
         public static void main (String[] args) {
                Empresa empresa = new Empresa();
                empresa.nomeEmpresa = "Testers for TI";
                empresa.cnpj = "094.847.958/0001-88";

                empresa.funcionarios = new Funcionario[10];

                Funcionario f1 = new Funcionario();
                f1.dataDeEntrada = new Data();
                //f1.empresaDoFuncionario = new Empresa();
                f1.nome = "Cameron Dias";
                f1.setEmpresa(empresa);
                f1.getEmpresa();
                f1.departamento = "TI";
                f1.salario = 4000;
                f1.dataDeEntrada.preencheData(5, 10, 1989);
                f1.rg = "6814975-8";
                empresa.adicionaFuncionario(f1);
                f1.getEmpresa();
                f1.mostra();

                Funcionario f2 = new Funcionario();
                f2.dataDeEntrada = new Data();

                f2.nome = "Robert Richards";
                //f2.nomeEmpresa = empresa;
                f2.departamento = "TI";
                f2.salario = 3700;
                f2.dataDeEntrada.preencheData(8, 6, 1995);
                f2.rg = "6187204-7";
                empresa.adicionaFuncionario(f2);
                f2.mostra();
            }
        }

getEmpresa() retorna a Empresa como objeto. Sinto que você está tendo dificuldades com essa lógica, aconselho você a voltar algumas aulas e aprender melhor como métodos e objetos funcionam.