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

Declaraçao do Array

Porque este pedaço de código compila sem erro ?

Funcionario[] Fun = new Funcionario[10];

E este mesmo pedaço não funciona ? Visto que para um array de tipos primitivos esta funcionaria ?

Ps.Gera um erro de indentifier expected;

Funcionario[] Fun ;
Fun = new Funcionario[10];
4 respostas

Oi, Marcelo.

Como você está usando esse pedaço de código exatamente? Pode colocar o código completo?

Eu creio que o erro ocorra porque quando você cria uma variável que vai receber uma referência para um array de tipos primitivos o Java sabe que ele vai receber a referência de um array de tipos primitivos e em seguida quando você cria, o Java faz sem problemas porque ele conhece os tipos primitivos, mas quando você cria uma variável que vai receber um tipo "Funcionario[]" o Java sabe que não é um tipo primitivo e não sabe resolver esse identificador depois, é necessário criar o array de Funcionario já informando tudo na mesma linha.

O codigo completo

class TestaFun {
    public static void main(String[]args){
        Funcionario Marcelo = new Funcionario();
        Marcelo.nome="Marcelo Takashi";
        Marcelo.Salario=3500;
        Marcelo.RecebeAumento(500);
        System.out.println("O salario anual é de :"+Marcelo.CalculaGanhoAnual()+" R$");    

        Marcelo.Mostra();    

        Funcionario Felipe = new Funcionario();
        Felipe.nome="Felipe Tavares";
        Felipe.Salario=5500;
        Felipe.RecebeAumento(500);
        System.out.println("O salario anual é de :"+Felipe.CalculaGanhoAnual()+" R$");    

        Felipe.Mostra();

        if(Marcelo==Felipe){    
            System.out.println("Os objetos sao iguais");
        }else{    
            System.out.println("Os objetos sao diferentes");    
        }

        Funcionario F1;
        F1=Marcelo;

        if(Marcelo==F1){    
            System.out.println("Os objetos sao iguais");
        }else{    
            System.out.println("Os objetos sao diferentes");    
        }

        Data M = new Data();

        M.MostraData();
        M.SetData(31,01,1998);
        M.MostraData();        
    }
}

class Funcionario{
    String nome;    
    String Departamento;
    double Salario;
    String DataEntrada;
    String RG;

    void RecebeAumento(double X){
        Salario=Salario+X;
        System.out.println("O novo salário é de :"+Salario+" R$");
    }    
    double CalculaGanhoAnual(){
        return this.Salario*12;
    }    
    void Mostra(){
        System.out.println("O nome do funcionário é :"+this.nome);
        System.out.println("Trabalha no Departamento :"+this.Departamento);
        System.out.println("O salário é de :"+this.Salario+" R$");
        System.out.println("Entrou na empresa na data de :"+this.DataEntrada);    
        System.out.println("O Rg do Funcionário é :"+this.RG);
    }
}
class Data {
    int Dia;
    int Mes;
    int Ano;
    void SetData(int D, int M,int A){
        this.Dia=D;
        this.Mes=M;    
        this.Ano=A;
    }
    void MostraData() {
        System.out.println("Data de entrada na empresa "+this.Dia+"/"+this.Mes+"/"+this.Ano);

    }
}
class Empresa{
    String nome;
    int CNPJ;
    Funcionario[] Fun = new Funcionario[10];
    void adicionar(Funcionario A){
        for(int X=0;X<11;X++){
            this.Fun[X]=A;
        }
    }

}
solução!

Obrigado, Marcelo.

Vou destacar somente a classe Emprsa, que tem o seu array:

class Empresa{
    String nome;
    int CNPJ;
    Funcionario[] Fun = new Funcionario[10];
    void adicionar(Funcionario A){
        for(int X=0;X<11;X++){
            this.Fun[X]=A;
        }
    }
}

Note que Fun se trata de um atributo da classe Empresa. Nesse caso, você não pode instanciar depois. O código abaixo causa erro:

class Empresa{
    String nome;
    int CNPJ;
    Funcionario[] Fun;
    Fun = new Funcionario[10]; // erro aqui
    void adicionar(Funcionario A){
        for(int X=0;X<11;X++){
            this.Fun[X]=A;
        }
    }
}

O erro ocorre ali, pois estamos no escopo da classe. Para instanciar o vetor, você tem três escolhas:

1) Declarar e instanciar o atributo, tudo numa linha só. Como está no seu exemplo.

2) Declarar o atributo e, num construtor (você vai ver isso depois) instanciar o vetor. Exemplo:

public class Empresa {
    String nome;
    int CNPJ;
    Funcionario[] Fun;
    public class Empresa() {
        this.Fun = new Funcionario[10];
    }
    void adicionar(Funcionario A){
        for(int X=0;X<11;X++){
            this.Fun[X]=A;
        }
    }
}

3) Instanciar o atributo em um método, o que, nesse caso, não é recomendado. A comparação que você fez com um vetor de tipo primitivo foi porque você, provavelmente, fez isso dentro de um método, como o main:

class Teste{
    public static void main(String[] args) {
        int[] inteiros;
        inteiros = new int[10]; // aqui funciona porque está dentro de um método
        (...)
    }
}

Isso responde sua dúvida?

OBS: Recomendo que reveja seu código com relação à convenção. Nomes de atributos e variáveis começam com letra minúscula. Isso pode confundir e incomodar outras pessoas que trabalharem contigo. Letras maiúsculas em Java indicam uma Classe ou Interface.