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

Erro: Unexpected Type

Estou compilando e enfrentando o seguinte erro:

ProgramaEmpresa.java:9: error unexpected type emp1.getFuncionario(0) = new Funcionari[10]; // Apontando para o inicio do pareteses.
required: variable
found: value 

o mesmo erro se repeti na linha 11.
7 respostas

Segue o código:

class ProgramaEmpresa {

    public static void main(String[] args) {

        Empresa emp1 = new Empresa();
            emp1.setNomeEmpresa("MicroAPP");
            emp1.setCnpj("45678912");

        emp1.getFuncionario(0) = new Funcionario[10];

            emp1.getFuncionario(0) = new Funcionario();
                emp1.getFuncionario(0).setNomeFuncionario("PABLO DE ABREU");
                emp1.getFuncionario(0).setCpf("456789123");
                emp1.getFuncionario(0).setFuncao("TI");
                emp1.getFuncionario(0).setSalario(5000.00);
                emp1.getFuncionario(0).setAumento(500.00);
            //emp1.funcionarios[0].dataDeEntrada = new Data(); // não preciso mais deste new porque ja faço isso em Empresa.
                emp1.getFuncionario(0).setDataDeEntrada(20,02,1988);

            emp1.mostraTodasAsInformacoes();

    }

}

Oi Pablo, posta o código da sua classe Empresa também.

Segue o código da classe Empresa. Em comentários tem uma tentativa de setFuncionario

class Empresa {

    private String nomeEmpresa;
        public void setNomeEmpresa(String nome) {
            this.nomeEmpresa = nome;
        }
        public String getNomeEmpresa() {
            return this.nomeEmpresa;
        }

    private String cnpj;
        public void setCnpj(String texto) {
            this.cnpj = texto;
        }
        public String getCnpj() {
            return this.cnpj;
        }

    private Funcionario[] funcionarios;
        /*public void setFuncionario() {
            Funcionario newFuncionario[posicao] = new Funcionario();
            newFuncionario.
            this.funcionarios = newFuncionario[posicao];
        }*/
        public Funcionario getFuncionario(int posicao) {

            return this.funcionarios[posicao];
        }



    private int livre = 0;

    private void adiciona(Funcionario f){ // metodo para adicionar funcionarios.

        this.funcionarios[this.livre] = f;
        this.livre++;
    }

    public void mostraTodasAsInformacoes() {
        System.out.println();
        System.out.println("*************************");
        System.out.println("A empresa: " + getNomeEmpresa());
        System.out.println("Com o CNPJ: " + getCnpj());
        System.out.println("*************************");
        System.out.println();

        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);
        }

    }
}

class Funcionario {

    private String nomeFuncionario;
        public void setNomeFuncionario(String texto) { // set para eu digitar em ProgramaEmpresa o valor da variavel.
            this.nomeFuncionario = texto;        
        }
        public String getNomeFuncionario() { // get para eu pegar o valor dessa varia e imprimir por ex.
            return this.nomeFuncionario;
        }

    private String cpf;
        public void setCpf(String texto) {
            this.cpf = texto;
        }
        public String getCpf() {
            return this.cpf;
        }

    private String funcao;
        public void setFuncao(String texto) {
            this.funcao = texto;
        }
        public String getFuncao() {
            return this.funcao;
        }

    private double salario;
        public void setSalario(double valor) {
            this.salario = valor;
        }
        public double getSalario() {
            return this.salario;
        }

    private double aumento;
        public void setAumento(double valor) {
            this.aumento = valor;
        }
        public double getAumento() {
                return this.aumento;
            }


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

    private double calculaGanhoAnualComAumento() {
            return this.getAumento() * 12;
        }
        public double getCalculoGanhoAnualComAumento() {
            return this.calculaGanhoAnualComAumento();
        }

    private Data dataDeEntrada;
        public Data getDataDeEntrada() {
            return dataDeEntrada;
        }
        public void setDataDeEntrada(int dia, int mes, int ano) {
            Data newData = new Data(); // aqui estou criando um new Data(), sem precisar criar no ProgramaEmpresa.
                newData.preencheData(dia, mes, ano); // aqui digo que o newData é o preencheData().
                this.dataDeEntrada = newData; // aqui digo que o newData é = a this.dataDeEntrada enviando o valor do setDataDeEntrada para dataDeEntrada.
        }

        private int idade() {
            return 2017 - this.dataDeEntrada.ano;
        }

    public void mostra() {

        System.out.println("===========================================================");
        System.out.println();
        System.out.println("****************************************************************");
        System.out.println(" MOSTRANDO TODAS AS INFORMACOES DO FUNCIONARIO " + this.nomeFuncionario);
        System.out.println("****************************************************************");
        System.out.println();

        System.out.println("o funcionario: " + this.getNomeFuncionario());   
        System.out.println("Tem CPF: " + this.getCpf());
        System.out.println("Ocupa o cargo: " + this.getFuncao());
        System.out.println("Sua idade e: " + this.idade());
        System.out.println("Entrou na empresa em: " + this.dataDeEntrada.getFormatadaData());
        System.out.println("Recebe a quantia de: " + this.getSalario());
        System.out.println("Teve um aumento de: " + this.aumento);
        System.out.println("Seu salario mais aumento somam: " + this.getAumento());
        System.out.println("Tendo ganho anual de: " + getCalculoGanhoAnual() + " sem o aumento.");
        System.out.println("Com seu aumento o Ganho Anual passa a: " + this.getCalculoGanhoAnualComAumento());
    }
}

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

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

    public String getFormatadaData() {
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}
solução!

Olá Pablo, eu fiz algumas alterações para que seu código possa rodar,coloquei comentários tentando explicar o que alterei, qualquer dúvida só falar. Abaixo disponibilizei as classes que fiz alteração.

class Empresa {

    // Como o seu funcionário está como privado, não há como deterimar
    // diretamente na classe de teste, para fazer isso eu criei um
    // constructor para no momento em que você der new Empresa já poder
    // passar a quantidade de funcionários que essa empresa terá.
    public Empresa(int i) {
        this.funcionarios = new Funcionario[i];
    }

    private String nomeEmpresa;

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

    public String getNomeEmpresa() {
        return this.nomeEmpresa;
    }

    private String cnpj;

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

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

    private Funcionario[] funcionarios;

    /*
     * public void setFuncionario() { Funcionario newFuncionario[posicao] = new
     * Funcionario(); newFuncionario. this.funcionarios = newFuncionario[posicao]; }
     */
    public Funcionario getFuncionario(int posicao) {

        return this.funcionarios[posicao];
    }

    private int livre = 0;

    // Alterei o método adiciona funcionário para ele ficar public e poder ser 
    // utilizado pela classe de teste.
    public void adiciona(Funcionario f) { // metodo para adicionar funcionarios.

        this.funcionarios[this.livre] = f;
        this.livre++;
    }

    public void mostraTodasAsInformacoes() {
        System.out.println();
        System.out.println("*************************");
        System.out.println("A empresa: " + getNomeEmpresa());
        System.out.println("Com o CNPJ: " + getCnpj());
        System.out.println("*************************");
        System.out.println();

        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);
        }

    }
}
class ProgramaEmpresa {

    public static void main(String[] args) {

        Empresa emp1 = new Empresa(10); // Constructor da empresa determinando a quantidade
                                        // de Funcnionários
        emp1.setNomeEmpresa("MicroAPP");
        emp1.setCnpj("45678912");

        // Conforme o código você deve primeiro criar um Funcionário
        // para depois passar ele pelo método adiciona
        //emp1.getFuncionario(0) = new Funcionario[10];
        Funcionario f1 = new Funcionario();
        emp1.adiciona(f1);

        //emp1.getFuncionario(0) = new Funcionario(); // já foi criado um Funcionário
        emp1.getFuncionario(0).setNomeFuncionario("PABLO DE ABREU");
        emp1.getFuncionario(0).setCpf("456789123");
        emp1.getFuncionario(0).setFuncao("TI");
        emp1.getFuncionario(0).setSalario(5000.00);
        emp1.getFuncionario(0).setAumento(500.00);
        // emp1.funcionarios[0].dataDeEntrada = new Data(); // não preciso mais deste
        // new porque ja faço isso em Empresa.
        emp1.getFuncionario(0).setDataDeEntrada(20, 02, 1988);

        emp1.mostraTodasAsInformacoes();

    }
}

Obrigado Joel! Deu certinho aqui...

Fiquei só com uma dúvida: Porque foi preciso criar a variável Empresa?

public Empresa(int i) {
        this.funcionarios = new Funcionario[i];
    }

Até então não tinha criado a variável com mesmo nome de minha classe principal!

Bom Pablo, nesse caso não é uma variável, é um método, e dá forma como foi criado é chamado método construtor, toda classe tem um construtor, e nesse caso implementamos o nosso próprio construtor, mas fica tranquilo que esse assunto será tratado mais para a frente no curso, e se não me engano a implementação será a mesma.

ok! Obrigado Joel Spinelli.