Criação dinamica de Matrizes em Java

6 respostas
walisson_maicon_silv

Ola, estou com um pequeno problema…

Tenho que fazer uma classe que construa dinamicamente uma matriz de N dimendões em Java. (Onde n é a quantidade de
dimensoes da matriz).

Existe alguma classe que possa me auxiliar nisso,
ou alguma forma de definir a quantidade de dimensões dinamicamente .

Basicamente o que eu gostaria de fazer é:

1 dimensao - int[];

2 dimensões - int[][];

3 dimensões - int[][][];

n dimensões - int [][][]  ate n;

Desde ja agradeço a todos.

6 Respostas

I

Caro Colega,

Nesse caso , eu particularmente criaria um método que fizesse tal ação…

Eu passo o numero de Dimensões e instancio a matriz de acordo com o numero passado.

Abraços

Rodrigo César
Salvador-BA

bernardo.rafael

Cara, qual o tamanho do seu Array?

O código abaixo pode até lhe ajudar, mas frequentemente vc terá problemas de java heap space por conta da quantidade de dimensões.

public Object[] buildArray(int dimensoes, int tamanho, Object defaultValue){
		// cria o array de retorno
		Object[] resultado = new Object[tamanho];

		// verifica se existem ais dimensoes a serem criadas
		if(dimensoes > 1){
			// cria uma nova dimensao no array
			for(int posicao=0; posicao < tamanho; posicao++){
				// adiciona a nova dimensao na posicao dada.
				resultado[posicao] = buildArray(dimensoes -1 , tamanho, defaultValue );
			}
		}
		else{
			// preenche o array com o valor default.
			for(int posicao=0; posicao < tamanho; posicao++){
				// atribui o valor default na posicao dada.
				resultado[posicao] = defaultValue;
			}
		}
		// retorna o resultado.
		return resultado;
	}

Outro problema, isso só é possivel usando um tipo objeto ‘coringa’, com o qual a gente possa tratá-lo como array ou objeto ao mesmo tempo, ou seja: java.lang.Object. =]

O código abaixo ilustra como testar o método:

Object[] metaArray = buildArray(4, 5, new Float(150.12368));
	
	Object[] temp = metaArray;
	int dimensoes = 1;
	while(temp!=null &&  temp[0].getClass().isArray() ){
		dimensoes++;
		temp = ((Object[])temp[0]);
	}
	System.out.println("Dimensoes: " + dimensoes);
	
	for(Object valor : temp ){
		System.out.println("Valor: " + valor +  " do tipo: " + valor.getClass().getName());
	}
Flavio_Luiz

velho só uma coisa vc ñ quer criar uma Matriz…
quando eu li o topico fiquei curioso em saber o problema…
com isso me veio a pergunda… qual é a definição de matriz…
veja os dois links…
http://pt.wikipedia.org/wiki/Matriz_(matem%C3%A1tica)
http://pt.wikipedia.org/wiki/Array

walisson_maicon_silv

Valew a ajuda :smiley:

era isso mesmo que eu queria … brigadao.

O tamanho do meu array tem que ser dinamico …
Na verdade eu estou fazendo um simulador de competição onde cada jogador tem n estrategias e a competiçao tem n jogadores.
e para cada novo jogador eu terei que colocar uma dimensao a mais no meu Array…

Ate mais brigadao denovo…

E

wmaicon:
Valew a ajuda :smiley:

era isso mesmo que eu queria … brigadao.

O tamanho do meu array tem que ser dinamico …
Na verdade eu estou fazendo um simulador de competição onde cada jogador tem n estrategias e a competiçao tem n jogadores.
e para cada novo jogador eu terei que colocar uma dimensao a mais no meu Array…

Ate mais brigadao denovo…

Por que é que você precisa pôr uma dimensão nova no array para cada jogador?

Que maluquice - sua matriz provavelmente precisa apenas ser bidimensional, não N-dimensional.

B

Esse não é um tipo de problema que requer n dimensões, só precisa aumentar o tamanho do array.

E segundo, se quiser um simulador, faça com objetos normais, não com arrays. Até uma Collection te ajudará mais.

E respondendo a pergunta original: java.lang.reflect.Array.newInstance

Criado 7 de outubro de 2009
Ultima resposta 14 de out. de 2009
Respostas 6
Participantes 6