No segundo exemplo ( int [][] myArray = new int [2][5] 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
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
lavh
Aqui:
int[][]myArray=newint[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]=newint[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=newint[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]=newint[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=newint[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
lavh
Se vc fizer isso:
int[][]myArray=newint[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=newint[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=newint[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: