Problema com 3 classes e 1 array

5 respostas
lfm.vicente

Tenho o seguinte exercício...

Criar classe Funcionario com nome, salario e RG, criar uma classe Empresa com nome, CNPJ e um array de Funcionario e depois criar um metodo contrata que recebe uma referencia a Funcionario como argumento, e guarda esse funcionário Ex.( void contrata(Funcionario f){...} ). Depois criar uma classe com o Main e mostrar os dados dos funcionários cadastrados.

Criei as seguintes classes:

Classe Empresa

public class Empresa {
    private String nome;
    private String cnpj;
    Funcionario func [] = new Funcionario [10];
    public Empresa(String nome, String cnpj){
        this.nome = nome;
        this.cnpj = cnpj;
    }
    public void contrata(Funcionario f){
        for(int i = 0; i <= func.length; i++){
            f = func[i];
            System.out.println(func[i]);
        }
    }
}

Classe Funcionário

public class Funcionario {
    private String nome;
    private double salario;
    private String rg;
    public Funcionario(String nome, double salario, String rg){
        this.nome = nome;
        this.salario = salario;
        this.rg = rg;
    }
}
Classe Main
public class TestaFuncionario {
    public static void main(String args []){
        Funcionario f1 = new Funcionario("Felipe", 15000.0, "36.702.810-4");
        Funcionario f2 = new Funcionario("João", 1000.0, "12.345.678-10");
        Empresa emp = new Empresa("TESTE", "0111335513515");
        emp.contrata(f1);
        
    }
}

Quando mando executar aparece o seguinte resultado:

run:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
null
null
null
at Empresa.contrata(Empresa.java:11)
null
at TestaFuncionario.main(TestaFuncionario.java:7)
null
null
null
null
null
null

Qual o motivo de mostrar esse resultado??? Já tentei modificar mais sempre mostra o mesmo resultado...
Se alguém puder ajudar eu agradeço mto xD

5 Respostas

ViniGodoy

Quando for postar código, por favor, use a tag code. As tags de negrito e itálico ajudam muito pouco comparado a um código colorido e formatado de verdade. Outra coisa, não use só letras maiúsculas nos títulos do seu tópicos. Além de deixar o título horrível de ler, pode deixar o GUJ realmente um horror se todos começarem a fazer isso.

Seu problema é que você está imprimindo o array de funcionários inteiro, tenha sido contratado os 10 funcionários ou não. Mantenha um contador de quantos funcionários efetivamente existem na empresa e só imprima até lá, ou use um List.

Outra coisa, o seu for deve ir até que i < funcionarios.length. Lembre-se que como os índices começam em 0, o índice length não existe e, portanto, o = vai dar aquele pau de "ArrayIndexOutOfBoundsExceptions".

lfm.vicente

então… eu alterei o código na parte em que imprime o array e blz… o erro “ArrayIndexOutOfBoundsExceptions” sumiu… só que o que eu não entendo é o motivo de aparecer apenas NULL nos dados do funcionário quando imprimo o array. Em relação a usar o List… eu ainda não aprendi xD

ViniGodoy

Seu array é para 10 funcionários, mas vc só cadastra 2. O que tem nas outras posições? NULL.

lfm.vicente

Correto… mais no caso deveria aparecer os dados q eu gravei e o resto NULL… e não está acontecendo… até nas posições que eu gravo as informações está aparecendo null…

ViniGodoy

Reveja o seu método contrata.

Algumas dicas:

  1. Não será necessário usar um for;
  2. Quem deve receber dados é func[i] e não o contrário.
  3. Ainda falta um contador para dizer quantos funcionários há na empresa.
Criado 15 de maio de 2010
Ultima resposta 15 de mai. de 2010
Respostas 5
Participantes 2