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

Não consigo instanciar a classe Funcionario[] na classe main. Porque?

Oi pessoal, tudo bem?

Estou com uma dúvida aqui. Estou tentando declarar minha classe Funcionários[] na main e não consigo. Aparece esse erro aqui: Empresa.java:43: error: incompatible types: Funcionario[] cannot be converted to Funcionario Funcionario f = new Funcionario[2];

Segue meu código:

public class Empresa{
    private String empresa;
    private String cnpj;
    private Funcionario[] empregados;

    public void setEmpresa(String empresa){
        this.empresa = empresa;
    }

    public String getEmpresa(){
        return this.empresa;
    }

    public void setCnpj(String cnpj){
        this.cnpj = cnpj;
    }

    public String getCnpj(){
        return this.cnpj;
    }

    public Funcionario getFuncionario (int posicao){
        return this.empregados[posicao];
    }

}

class Funcionario{
    private String nomeFuncionario;
    private int idade;
    private double salario;
    private String dataEntrada;
    private String rg;
    private String departamento;
}

class Programa{
    public static void main(String[] args) {
        Empresa f1 = new Empresa();
        f1.setEmpresa("Empresa genérica");
        f1.setCnpj("123.456.789");

        Funcionario f = new Funcionario[2];

    }
}

Obrigado.

4 respostas
solução!

Oi Diego, tudo bem ?

O seu problema está aqui :


class Programa{
    public static void main(String[] args) {
        Empresa f1 = new Empresa();
        f1.setEmpresa("Empresa genérica");
        f1.setCnpj("123.456.789");

        Funcionario f = new Funcionario[2];

    }
}

Em especial na útima linha, onde está tentando criar na memória um array de funcionários e tentando armazenar a referencia em um objeto do tipo funcionário.

O compilador está falando que isso não é possível, você precisa atribuir esse array a uma variavel do mesmo tipo :


class Programa{
    public static void main(String[] args) {
        Empresa f1 = new Empresa();
        f1.setEmpresa("Empresa genérica");
        f1.setCnpj("123.456.789");

        Funcionario[] funcionarios = new Funcionario[2];

    }
}

Isso deve ajudar !

Abraços

Boa tarde Diego, na verdade Funcionario é uma classe apenas e não um array, dessa forma você consegue fazer:

Funcionario f = new Funcionario();

Agora dentro da Empresa você declara uma array de funcionarios dai você pode instanciar um array e passar para essa variável(empregados):

empregados = new Funcionario[2]

A questão que não consigo imprimir. Aparece o erro: Exception in thread "main" java.lang.NullPointerException at Empresa.getFuncionario(Empresa.java:23) at Programa.main(Empresa.java:51)

public class Empresa{
    private String empresa;
    private String cnpj;
    private Funcionario[] empregados;

    public void setEmpresa(String empresa){
        this.empresa = empresa;
    }

    public String getEmpresa(){
        return this.empresa;
    }

    public void setCnpj(String cnpj){
        this.cnpj = cnpj;
    }

    public String getCnpj(){
        return this.cnpj;
    }

    public Funcionario getFuncionario (int posicao){
        return this.empregados[posicao];
    }
}

class Funcionario{
    private String nomeFuncionario;
    private int idade;
    private double salario;
    private String dataEntrada;
    private String rg;
    private String departamento;

    public void setNomeFuncionario(String nomeFuncionario){
        this.nomeFuncionario = nomeFuncionario;
    }

    public String getNomeFuncionario(){
        return this.nomeFuncionario;
    }
}

class Programa{
    public static void main(String[] args) {
        Empresa f1 = new Empresa();
        f1.setEmpresa("Empresa genérica");
        f1.setCnpj("123.456.789");

        Funcionario[] funcionarios = new Funcionario[2];
        f1.getFuncionario(0).setNomeFuncionario("Diego");

        System.out.println(f1.getFuncionario(0).getNomeFuncionario());


    }
}

Olá Diego.

Quando você criou a variável funcionarios, você disse ao java que ela será um array que guarda referencias de variáveis do tipo Funcionario.

Então: Funcionario[] funcionarios = new Funcionario[2]; funcionarios[0] = new Funcionario();

Faltou você criar o endereço da memória que ira guardar um objeto do tipo Funcionario.

Após isso, passar o endereço por um set(ja que esta private) do array para a variável empregados dentro da classe empresa

Os erros da linha 23 e 51 são por conta de não haver uma referência válida.

class Programa{ public static void main(String[] args) { Empresa f1 = new Empresa(); f1.setEmpresa("Empresa genérica"); f1.setCnpj("123.456.789");

Funcionario[] funcionarios = new Funcionario[2]; funcionarios[0] = new Funcionario(); f1.setEmpregados(funcionarios);

f1.getFuncionario(0).setNomeFuncionario("Diego"); System.out.println(f1.getFuncionario(0).getNomeFuncionario());

}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software