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

Dúvida no Ex. 6 da Aula 5 - Modificadores de acesso

Não entendi esse trecho do código na classe Empresa na duvida

Empresa(String cnpj){
        this.cnpj = cnpj;
        this.funcionario = new Funcionario[10];
    }

Minha Classe TestaEmpresa está dando erro quando faço um objeto.

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

        Empresa empresaTec = new Empresa();
        Funcionario f1 = new Funcionario();
        f1.setNome("Sidney");
        f1.setSalario(2100);
        f1.setRg("123456");
        empresaTec.adiciona(f1);              

        //Mostrando funcionario e salario
        empresaTec.mostraEmpregados();

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - constructor Empresa in class alura.ExeOO.Empresa cannot be applied to given types; required: java.lang.String found: no arguments reason: actual and formal argument lists differ in length at alura.ExeOO.TestaEmpresa.main(TestaEmpresa.java:6)

5 respostas

se vc quer ter varios funcionario seria ideal vc criar um array deles, se nao vc vai ter que criar um objeto pra cada funcionario.Tenta primeiro criar a classe funcionario e um objeto dentro de Empresa com tipo Funcionario assim e so vc fazer a chamada desse objeto e preencher ele por ex,

Empresa empresaTec = new Empresa() empresaTec.f1 = new Funcionario(); empresaTec.f1.setNome("Sidney"); empresaTec.f1.setSalario(2100); empresaTec.f1.setRg("123456");

Sidnei, Boa noite !

pelo que vi em seu código o erro esta na hora de instancia o objeto empresaTec .

o construtor da classe Empresa tem recebe um String cnpj e quanfo vc instacia nao esta passando como padrao o cnpj

espero ter ajudado , bons estudos

public class Funcionario{
    private String nome;
    private double salario;    
    private String Rg;    
    Data dataEntrada;

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

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

    public double getSalario(){
        return this.salario;
    }

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

    public String getRg(){
        return this.Rg;
    }

    public void setRg(String Rg){
        this.Rg = Rg;
    }

    public Data getDataEntrada(Data dataEntrada){
        return dataEntrada;
    }

    public void setDataEntrada(Data dataEntrada){
        this.dataEntrada = dataEntrada;
    }


    public void Aumento(double valorRecebido){
        salario += valorRecebido;
    }

    public double getGanhoAnual(){
        return salario*12;
    }
    public void mostra(){
        System.out.println("Nome:"+ this.nome);
        System.out.println("Data de Admissão: "+this.dataEntrada.getFormatada());
        System.out.println("Salario atual: "+this.salario);
        System.out.println("Ganhos Anual: "+this.getGanhoAnual());
        System.out.println("Funcionario cadastrado!");
        System.out.println("====================");
    }        
}

Celso e Carlos,

me desculpe mais ainda não compreendi a solução.

solução!

Sidnei , Bom dia !!

o erro está o ocorrendo , pois na classe empresa tem um construtor recebendo String CNPJ e já instanciando o array funcionario .

Empresa(String cnpj){
        this.cnpj = cnpj;
        this.funcionario = new Funcionario[10];
    }

Ok , na classe TestaEmpresa você está instanciando o objeto empresaTec da seguinte forma :

Empresa empresaTec = new Empresa();

enquanto o certo seria, por exemplo :

Empresa empresaTec = new Empresa("00.000.001/00001-01");

porque disso , quando você modifica o construtor padrão da classe empresa e passa como argumento no construtor , quando você for inicializar o objeto , obrigatoriamente terá que chamar o construtor da classe empresa com o valor do argumento .

espero ter ajudado, Bons estudos

Também me ajudo Celso Obrigado. Mas acho que esse exercício com construtor deveria ser no próximo capítulo não acha? isso porque até este capítulo não fala sobre construtor. Abraço