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

error: no suitable constructor found for Funcionario(no arguments)

Ao compilar a classe que contém o main, obtenho esse erro, após inserir apenas um construtor, porém mantive também minhas outras instâncias.

--> Classe Data

class Data{

    int dia, mes, ano;

    public Data(int dia, int mes, int ano){

        this.dia = dia;
        this.mes = mes;
        this.ano = ano;

    }

}

--> Classe Empresa

class Empresa{

    private String Cnpj;
    int livre = 0;

    private Funcionario[] funcionarios;

    public void setFuncionarios(Funcionario[] funcionarios){

        this.funcionarios = funcionarios;
    }

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

    public Funcionario getFuncionario (int posicao) {

        return this.funcionarios[posicao];
    }

    public void mostraTodasAsInformacoes() {

    System.out.println("Com o CNPJ: " + getCnpj());

    for (int i = 0; i < this.funcionarios.length; i++) {

        Funcionario funcionario = this.funcionarios[i];

         if (funcionario == null)
             continue;

         funcionario.mostra();
         System.out.println("Funcionario na posicao: " + i);

        }

    }

    boolean contem(Funcionario f) {

        for (int i =0; i<funcionarios.length; i++){

            if(f == funcionarios[i]){
                    return  true;
            }
        }        

        return false;

    }

    public String getCnpj(){

        return    this.Cnpj;

    }

    public void setCnpj(String Cnpj){

        this.Cnpj = Cnpj;

    }

}

--> Classe Funcionário

class Funcionario{

    String nome, dpto, rg;
    double salarioAnual;
    private double salario;
    double aumentosalario;

    Data dataEntrada;


    public Funcionario(String nome) {

        this.nome = nome;

    }

    public Funcionario(String nome, double aumentosalario) {

        this.nome=nome;
        this.aumentosalario=aumentosalario;

    }

    public String getNome(){

        return this.nome;
    }

    public void setNome(String nome) {

        this.nome =nome;

    }

    public String getDpto(){

        return this.dpto;
    }

    public void setDpto(String depto){

        this.dpto = dpto;
    }

    public String getRg(){

        return this.rg;

    }

    public void setRg(String rg){

        this.rg= rg;
    }

    public void recebeAumento(double aumento){

        this.aumentosalario = this.salario + aumento;
    }

    public double getAumentoSalario(){

        return this.aumentosalario;

    }

    double getcalculaGanhoAnual(){

        return salarioAnual = this.salario * 12;
    } 

    public void setSalario(double salario){

        this.salario = salario;

    }

    public double getSalario(){

        return this.salario;

    }

    public void setData(Data dataEntrada){

        this.dataEntrada =dataEntrada ;
    }


    public Data getData() {

        return this.dataEntrada;
    }

    public void mostra(){

        System.out.println("Funcionario:" + getNome());
        System.out.println("RG:" + getRg());
        System.out.println("Data de entrada: " +this.getData().dia+"/"+this.getData().mes+"/"+this.getData().ano);
        System.out.println("Trabalha no departamento de:" + getDpto());
        System.out.println("salario atual:" + getSalario());
        System.out.println("salario com aumento:" + getAumentoSalario());
        System.out.println("Salario Anual: " + getcalculaGanhoAnual());
    }    

}

--> Classe TestaEmpresa

public class TestaEmpresa{

    public static void main(String[] args) {

    Empresa empresa = new Empresa();

     empresa.setCnpj("11112223344414");


     empresa.setFuncionarios(new Funcionario[5]);

     Funcionario f1 = new Funcionario();
    //*exercicio 1    


     Funcionario joao = new Funcionario("Joao Cabral de Melo Neto First", 0);    
     empresa.adiciona(joao);

     //*exercicio 1 fim

     f1.setSalario(1000);
     f1.rg = "50.12.15-X";
     f1.setNome("Primeiro Funcionario");
     f1.dpto = "Tralalalala ooooo";
     f1.setData(new Data(20,12,2017));

     f1.recebeAumento(100.0);
     empresa.adiciona(f1);


     Funcionario f2 = new Funcionario();
     f2.nome="Segundo Aee";
     f2.setSalario(2000);
     f2.rg = "35.112.23-X";
     f2.dpto = "Oiiii Tralalalala ooooo";
     f2.setData(new Data(25,12,2017));
     empresa.adiciona(f2);


     Funcionario f3 = new Funcionario();
     f3.nome="Terceiro Thrice";
     f3.setSalario(3000);
     f3.rg = "42.256.89-3";
     f3.dpto = "Oiiii Tralalalala ooooo uooo";
     f3.setData(new Data(30,12,2017));
     empresa.adiciona(f3);


    empresa.mostraTodasAsInformacoes();    

    boolean teste = empresa.contem(f3);

    System.out.println(teste);

    }    

}
2 respostas
solução!

Oi Sidney,

Como você adicionou um construtor na classe Funcionario, o Java não gera mais o construtor default(sem argumentos).

Ou seja, você não pode mais ter o seguinte código:

Funcionario f = new Funcionario();

Precisa passar os parametros para o construtor. Ex:

Funcionario f = new Funcionario("joao da silva", 1000.0);

No seu código da classe Main, tem os objetos Funcionarios f2 e f3 sendo instanciados sem passar os parametros no construtor.

Você vai precisar alterar essas linhas para passar os parametros, ou então criar mais um construtor na classe Funcionario, que não recebe parametros:

class Funcionario {
    public Funcionario(String nome) {
        this.nome = nome;
    }

    public Funcionario(String nome, double aumentosalario) {
        this.nome=nome;
        this.aumentosalario=aumentosalario;
    }

    //novo construtor sem parametros
    public Funcionario() {
    }

}

Bons estudos!

Exatamente!!