Fórum Porque a ordem de um Array muda, se o valor de uma variável não muda ao chamar um método? #582952
27/06/2017
0
Não entendo porque é possível mudar um Array, apenas invocando um método sem retorno, se o valor de uma variável não muda ao invocar um método sem retorno.
Por exemplo, esse código:
// Código abaixo
public class Exemplo
{
public static void main(String[] args)
{
int x = 10;
mudarValor(x);
System.out.print(x);
int[] Array = {4, 7, 5, 2, 9, 8, 1, 3, 6}; // Criei um array com os números desordenados.
arrumarArray(Array); // Método para arrumar os números de um Array em ordem crescente.
printArray(Array); // Método para imprimir um Array.
}
public static void arrumarArray (int[] A)
{
for (int i = 0; i < A.length; i++)
{
for (int j = 0; j < A.length-1; j++)
{
if (A[j] > A[j+1])
{
int troca = A[j];
A[j] = A[j+1];
A[j+1] = troca;
}
}
}
} // fim do arrumarArray
public static void mudarValor (int x)
{
x = 20;
}
public static void printArray (int[] A)
{
System.out.println();
for (int i : A)
{
System.out.print(i + " ");
}
} // fim do printArray
}
/* Esse código vai imprimir duas linhas:
10
1 2 3 4 5 6 7 8 9
*/
// Fim do código.
Eu sei que o valor da variável não mudou, porque são escopos diferentes, e eu não mudei o valor do x no main, e sim no método.
Porém, seguindo esse mesmo raciocínio, no caso do array, ele não deveria alterar o do main, porém ele alterou. Logo, se eu precisasse usar o Array desordenado eu não conseguiria.
Espero que ficou claro minha questão,
Obrigado :)
Por exemplo, esse código:
// Código abaixo
public class Exemplo
{
public static void main(String[] args)
{
int x = 10;
mudarValor(x);
System.out.print(x);
int[] Array = {4, 7, 5, 2, 9, 8, 1, 3, 6}; // Criei um array com os números desordenados.
arrumarArray(Array); // Método para arrumar os números de um Array em ordem crescente.
printArray(Array); // Método para imprimir um Array.
}
public static void arrumarArray (int[] A)
{
for (int i = 0; i < A.length; i++)
{
for (int j = 0; j < A.length-1; j++)
{
if (A[j] > A[j+1])
{
int troca = A[j];
A[j] = A[j+1];
A[j+1] = troca;
}
}
}
} // fim do arrumarArray
public static void mudarValor (int x)
{
x = 20;
}
public static void printArray (int[] A)
{
System.out.println();
for (int i : A)
{
System.out.print(i + " ");
}
} // fim do printArray
}
/* Esse código vai imprimir duas linhas:
10
1 2 3 4 5 6 7 8 9
*/
// Fim do código.
Eu sei que o valor da variável não mudou, porque são escopos diferentes, e eu não mudei o valor do x no main, e sim no método.
Porém, seguindo esse mesmo raciocínio, no caso do array, ele não deveria alterar o do main, porém ele alterou. Logo, se eu precisasse usar o Array desordenado eu não conseguiria.
Espero que ficou claro minha questão,
Obrigado :)
Lucas
Curtir tópico
+ 0
Responder
Post mais votado
27/06/2017
Oi Lucas, tudo bem?
Isso aconteceu porque tipos primitivos possuem passagem por valor, e Arrays possuem valores por referência, ou seja, quando há passagem por valor, é passada uma cópia do valor da variável, na passagem por referência, é passada uma referência à própria variável ( altera direto no endereço de memória).
Você pode forçar a passagem por referência, ou então instanciar um novo array (tipo um auxiliar) e atribuir o valor do array desordenado.
Isso aconteceu porque tipos primitivos possuem passagem por valor, e Arrays possuem valores por referência, ou seja, quando há passagem por valor, é passada uma cópia do valor da variável, na passagem por referência, é passada uma referência à própria variável ( altera direto no endereço de memória).
Você pode forçar a passagem por referência, ou então instanciar um novo array (tipo um auxiliar) e atribuir o valor do array desordenado.
Aline Bianchini
Responder
Gostei + 4
Clique aqui para fazer login e interagir na Comunidade :)