[RESOLVIDO COM ARRAYLIST] Definindo o tamanho do array com uma variável

Sou eu mais uma vez :lol:

Pessoal, estou tentando definir o tamanho de um array com uma variável do tipo int. na verdade é o seguinte:
Tenho uma classe Funcionário e uma classe Empresa.
Na classe Empresa tenho um array de funcionários com o tamanho (tamanho da variável definida pelo usuário). Tenho o getTam que defini o valor da variável tam que será usada como tamanho do array, só que quando eu vou adicionar os funcionários dá o seguinte erro

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at empresa.simples.Empresa.adiciona(Empresa.java:20) at empresa.simples.TestaFuncionario.main(TestaFuncionario.java:22)
se eu mando imprimir a variável tam ele imprime o valor atribuido pelo usuário mas na hora que eu defino o tamanho do array não funciona.
Alguém tem uma solução para resolver este problema?

Aí vão as classes

[code]package empresa.simples;

class Empresa {
private String nome;
private String cnpj;
int contador = 0;
private int tam;

Funcionario[] funcionario = new Funcionario[tam];

void setTam(int tam) {
	this.tam = tam;
}

int getTam() {
	return this.tam;
}

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

public void imprimeFuncionarios() {
	for (int x = 0; x < funcionario.length; x++) {
		System.out.println(funcionario[x].getNome());
		System.out.println(funcionario[x].getRg() + "\n");
	}
}

}[/code]

[code]package empresa.simples;

public class Funcionario {
private String nome;
private String rg;

Funcionario(String nome, String grg){
	this.nome = nome;
	this.rg = grg;
}

String getNome(){
	return this.nome;
}

String getRg(){
	return this.rg;
}

}[/code]

[quote]package empresa.simples;

import javax.swing.JOptionPane;

class TestaFuncionario {
public static void main(String[] args) {

	String quantidade = JOptionPane
			.showInputDialog("Quantos Funcionários Deseja Cadastrar neste Momento? ");
	int quant = Integer.parseInt(quantidade);

	Empresa empresa = new Empresa();

	empresa.setTam(quant);

	Funcionario f = new Funcionario("Bruno", "12544742-5");

	Funcionario f2 = new Funcionario("Élson", "09326547-8");

	System.out.println(empresa.getTam());

	empresa.adiciona(f);
	empresa.adiciona(f2);
	empresa.adiciona(f);
	empresa.adiciona(f2);
	empresa.adiciona(f);
	empresa.adiciona(f2);
	empresa.adiciona(f);
	empresa.adiciona(f2);

	empresa.imprimeFuncionarios();

}

}
[/quote]

vc tem q iniciar tam com um falor defaut pra q ele possa setar o tamanho do array
como ele eh null entao gera esse problema
inicia tam com 0, isso jah resolve

quando vc instancia o array a variavel tam é nula, por isso da esse erro.

se vc quiser trabalhar com vetores dinamicos que mudam de tamanho…

trabalhe com listas dinamicas…

Olá amigo! Não funcionou. Se eu inicializar tam com um valor eu posso cadastrar aquele valor de funcionários. O lance é que eu quero definir qualquer valor em tempo de execução para não ficar preso a uma quantidade específica de registros. Na classe TestaFuncionário utilizo um JOptionPane para pegar o valor que quero definir como tamanho do array. Dá só uma olhada…

tenta por Funcionario[] funcionario = new Funcionario[getTam()];

variavel int o valor default é 0 e não null; se fosse da classe Integer seria null
Se você quer uma coisa mais dinamica use o ArrayList
Pra ArrayList e se vc quiser alterar o tamanho do arraylist tente o método
ensureCapacity()

[quote]Increases the capacity of this <tt>ArrayList</tt> instance, if necessary, to ensure that it can hold at least the number of elements specified by the minimum capacity argument.

param minCapacity the desired minimum capacity[/quote]

tenta por Funcionario[] funcionario = new Funcionario[getTam()];

já tentei e não funciona. Estou tentando fazer co ArrayList

O método adiciona está assim:

public void adiciona(Funcionario f) { ArrayList lista = new ArrayList(); lista.add(f); }

Agora stou tentando listra os funcionários inseridos

Como seria?

Já tem o exemplo aqui. Desculpem-me…

Você não pode fazer assim, por que senão sua lista sempre vai ter o tamanho igual a 1.

Seria + - assim:

[code]public class Teste {
ArrayList lista = new ArrayList ();

public void addFuncionario(Funcionario f) { 
    lista.add(f);
}

public void listaFuncionarios() {
    for(Funcionario f : lista) {
        // aqui você imprime os atributos da classe Funcionario que desejar...
    }
}  

}[/code]

T+

[quote=Bruno Lacerda]tenta por Funcionario[] funcionario = new Funcionario[getTam()];

já tentei e não funciona. Estou tentando fazer co ArrayList

O método adiciona está assim:

public void adiciona(Funcionario f) { ArrayList lista = new ArrayList(); lista.add(f); }

Agora stou tentando listra os funcionários inseridos

Como seria?[/quote]

Isso que vc fez ai não vai funcionar… vc está declarando o arraylist dentro do método e toda vez q vc chamar o método vai criar uma nova instancia do array… logo esse arraylist vai ter somente 1 item e depois q o método for finalizado ele deixa de existir…

Tenha o ArrayList como um atributo da sua classe

Uma dica, se vc estiver utilizando jdk 1.5 declare o ArrayList assim

ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();

Ai seu método adicionar ficaria assim

public void adicionar(Funcionario f) {
    funcionarios.add(f);
}

nesse caso seu ArrayList só vai aceitar Adicionar objetos da classe Funcionario.

Resolvido o problema!!!
Usei o exemplo do Diego.
Obrigado pessoal pela força.
Vou estudar mais a ArrayList para ver como trabalhar com registros específicos inseridos e tudo mais.

Obrigado e bom final de semana a todos…

Então dá uma lida aqui

Bom fim de semana pra você também…

T+