Escreva um algoritmo que leia um vetor de 10 posições e mostre-o. Faça um procedimento que faça um vetor inverso, trocando o 1º elemento com o último, o 2º elemento com o penúltimo e assim sucessivamente. Mostre o novo vetor depois da troca.
Quando mostro o vetor ele não ordena, onde estou errando ?
Segue o código :
public class Lista1ex9 {
public static void inverso (int v[]){
int aux = 0 ;
for (int i = 0; i <= 9; i++ ) {
for (int j = 9; j >= 0 ; j-- ) {
aux = v[j];
v[j] = v[i];
v[i] = aux;
}
System.out.print(" | ");
System.out.print(v[i]);
}
}
public static void main(String[] args) {
int v[] = new int[10];
System.out.println("ANTES");
System.out.println();
for (int i = 0;i <= 9 ; i++ ) {
v[i] = i;
System.out.print(" | ");
System.out.print(v[i]);
}
System.out.println();
System.out.println("DEPOIS");
System.out.println();
inverso(v);
}
Seu principal erro é aqueles 2 loops. Eles estão rodam umas cem vezes pra não surtir efeito nenhum. Acrescentei um contador no seu método inverso pra vc ver, faz o teste com isso:
/* ... */
public static void inverso (int v[]){
int aux = 0 ;
int counter = 0;
for (int i = 0; i <= 9; i++ ) {
for (int j = 9; j >= 0 ; j-- ) {
aux = v[j];
v[j] = v[i];
v[i] = aux;
counter++;
}
System.out.print(" | ");
System.out.print(v[i]);
}
System.out.println("\n\nCounter: " + counter);
}
/* ... */
E na verdade o que vc quer é que o loop vá apenas até metade do tal vetor. Fiz umas alterações e organizei melhor o código:
public class Main {
public static void inverter(int[] v){
int i = 0;
int j = v.length - 1;
int a = 0;
int g = v.length / 2;
while ( i < g ) {
a = v[j];
v[j--] = v[i];
v[i++] = a;
}
}
public static void mostrar(int[] v) {
for (int i = 0; i < v.length; i++)
System.out.printf("%d%s", v[i], (i < v.length - 1) ? " | " : "\n");
}
public static void inicializar(int[] v) {
for (int i = 0; i < v.length; i++) v[i] = i;
}
public static void main(String[] args) {
int v[] = new int[10];
inicializar(v);
mostrar(v);
inverter(v);
mostrar(v);
}
}
O legal dessa forma que fiz, usando o atributo length do array é que vc pode usar um vetor de qualquer tamanho que irá funcionar normalmente, pelo menos assim espero!
O problema está exatamente onde o @wldomiciano escreveu.
Além de não fazer nada neste caso, esse for dentro do outro aí adiciona uma complexidade tamanha no seu algoritmo: pra cara elemento ele percorre o vetor todo novamente, o que torna uma complexidade n^2 (quadrática). Dependendo do tamanho do vetor isso poderia levar muito tempo pra ser executado.
for (int i = 0; i <= 9; i++ ) {
for (int j = 9; j >= 0 ; j-- ) {
Dá pra fazer como ele recomendou (com while), mas se não quiser mudar toda a lógica do teu algoritmo, basta fazer apenas um for que vai até a metade do vetor: