Dúvida sobre arrays multidimensionais

7 respostas
lenando

Ok, criei uma array 2D (1 array com 2 outras arrays)

int [][] myArray = new int [2][];

Aqui vem a dúvida, o código abaixo é exatamente igual ao de cima, exceto pelo [5]. Alguém poderia me explicar no que esse [5] influencia ??? :cry:

int [][] myArray = new int [2][b][5][/b];

Att.
Fernando.

7 Respostas

lenando

O segundo código, corretamente formatado é:

int [][] myArray = new int [2][5];

Acho q a formatação BB se perdeu nos [][]

Att.
Fernando.

P

No segundo exemplo ( int [][] myArray = new int [2][5]:wink: você está reservando espaço para um array com 2 posições, onde cada posição conterá um array de 5 posições, como se fosse uma matriz de 2 por 5 (2 linhas e 5 colunas).

lenando

Eu também achava isso … mas depois que criei o código abaixo e ele ser compilado normalmente, comecei a ter minhas dúvidas :x

public class array {

	public static void main(String[] args) {

		int [][] myArray = new int [2][0];

		myArray [0] = new int[3];
			myArray [0][0] = 0;
			myArray [0][1] = 1;
			myArray [0][2] = 2;

		myArray [1] = new int [5];
			myArray [1][0] = 3;
			myArray [1][1] = 4;
			myArray [1][2] = 5;
			myArray [1][3] = 6;
			myArray [1][4] = 7;

		for (int [] x : myArray)
		{
			System.out.println("x = " + x);
			for (int s : x)
				System.out.println("\ts = " + s);
		}


	}

}

Seguindo a linha de raciocínio, na construção do array multidimensional

new int [2][0]

o tamanho de cada sub-array seria 0 … porém esse código compila normalmente, criando sub-arrays de 3 e 5 elementos !!!

Att.
Fernando.

acopiara
public class array {
 
 	public static void main(String[] args) {
 
 		int [][] myArray = new int [2][];
 
 		myArray [0] = new int[3];
 			myArray [0][0] = 0;
 			myArray [0][1] = 1;
 			myArray [0][2] = 2;
 
 		myArray [1] = new int [5];
 			myArray [1][0] = 3;
 			myArray [1][1] = 4;
 			myArray [1][2] = 5;
 			myArray [1][3] = 6;
 			myArray [1][4] = 7;
 
 		for (int [] x : myArray)
 		{
 			System.out.println("x = " + x);
 			for (int s : x)
 				System.out.println("\ts = " + s);
 		}
 
 
 	}
 
 }

Esse código é valido pois na hora da criacão so preciso especificar o tamanho da primeira dimensao. E depois tenho como criar outro array e alocar em uma posicao do array da priemeira dimensao.

valew

L

Aqui:

int [][] myArray = new int [2][0];

você está criando dois arrays, e dentro de nenhum desses dois arrays terá valor algum, pq o tamanho deles é 0.

Porem, aqui:

myArray [0] = new int[3];

você está mudando isso e dizendo que dentro do primeiro array agora você tem 3 posições, por isso o código funciona perfeitamente! Aqui você está criando um novo array de 3 posições e sobrescrevendo aquele que não tinha nenhuma posição! Idem para o de 5 posições…

Não sei se ficou claro…hehehe

lenando

lavh:
Aqui:

int [][] myArray = new int [2][0];

você está criando dois arrays, e dentro de nenhum desses dois arrays terá valor algum, pq o tamanho deles é 0.

Porem, aqui:

myArray [0] = new int[3];

você está mudando isso e dizendo que dentro do primeiro array agora você tem 3 posições, por isso o código funciona perfeitamente! Aqui você está criando um novo array de 3 posições e sobrescrevendo aquele que não tinha nenhuma posição! Idem para o de 5 posições…

Não sei se ficou claro…hehehe

Na verdade minha dúvida eh referente a criação do primeiro array, onde comeca toda a estória.

int [][] myArray = new int [2][0];

Se eu tirar esse 0 mesmo assim terei 2 subarrays, se eu deixar o 0 também terei 2 subarrays. Entao para que serve o 0 (ou qualquer outro valor que coloquei nos testes) na construção do array no valor da segunda dimensao ??? :shock:

Obrigado pela ajuda.

Att.
Fernando.

L

Se vc fizer isso:

int [][] myArray = new int [2][];

Você vai ganhar num NullPointerException se fizer isso:

myArray[0][0] = 1

pq os arrays “internos” não foram criados! myArray[0] aponta para nulo!

Jah se vc fizer isso:

int [][] myArray = new int [2][0];

Você vai ganhar um NOSuchElementException se fizer isso:

myArray[0][0] = 1

pq o Array “interno” foi criado, porem só pode ter 0 elementos, ou seja, nada, é meio inútel criar um array assim!

Mas se vc fizer isso:

int [][] myArray = new int [2][1];

e isso:

myArray[0][0] = 1

vai funfar blz!!

No seu caso, colocar [] ou [0] não muda muita coisa, pq se você não criar um novo array quando for usar os arrays internos vai levar excessão de qlq jeito, mas se você colocar um valor > 0 dai vc jah pode usar o array direto sem precisar dar um:

myArray[0] = new int[5]

por exemplo!

Criado 14 de fevereiro de 2007
Ultima resposta 15 de fev. de 2007
Respostas 7
Participantes 4