gente, estou com uma dúvida:
eu declaro uma array bidimensional:
int[][] status = new int[1][1];
E chamo uma função:
public void leMapa(int[][] status)
Que apenas redimensiona o array:
status = new int[width][height];
E coloca valores nele.
Na hora que volto, descubro que o array não é passado como referencia e sim como valor. Ou seja, não consigo devolver valores nele.
Por que isso? Um Array não é um objeto? Um objeto não é passado como referencia sempre? Como faço para popular dois arrays com uma só função?
Obrigado
cara seguinte… c vc faz…
status = new int[width][height];
vc está jogando fora a array q estava dentro do status…
a antiga array é jogada fora… e é criada uma nova array ai…
ou seja… c vc faz… isso daki
... int[][] minhaArray = new minhaArray[1][1];
leMapa(minhaArray);
c dentro de leMapa… vc de alguma forma faz… isso
public void leMapa(int[][] status) {
...
status = new int[width][height];
...
}
ele irá tirar a array minhaArray de dentro de status… e vai por a nova array int[width][height]; … isso não faz com q … minhaArray seja igual a int[width][height];
espero q vc tenha entendido
Vc está confundindo a referência para o array bidimensional, com o conteúdo.
Vamos lá…
Vc declarou um array de dimensões 1 por 1.
int[][] status = new int[1][1];
Onde o atributo status contém o endereço de memória para este array.
Na função,
public void leMapa(int[][] status) {
status = new int[width][height];
vc está passando uma referência do array bidimensional. Quando vc instância um novo array, com outras dimensões no atributo status, vc está alterando a referência local e não o atributo status que tem scopo de classe.
Blz?