Preciso de ajuda com vetores

[RESOLVIDO]
Pessoal, eu preciso inverter os valores no meu programa, de modo que o primeiro troque o último, o segundo com o penúltimo, e assim por diante. Acho que estou errando em detalhe, alguém conseguiria me ajudar ? Obrigado!!

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        
        int n = 6;
        int v[] = new int[n];
        int x = 5;
        int y = 0;
        
        
        
        for(int i = 0; i<n; i++){
            v[i] = s.nextInt();
        }
        
        for (int j = 0; j<n; j++){
            int tmp = v[y];
            v[y] = v[x];
            v[x] = tmp;
            System.out.printf("N[%d] = %d\n", y, v[y]);
            y++;
            x--;
        }
    }
}

Se for só para imprimir no console:

int v[] = new int[] {1,2,3,4,5,6};

for (int i = v.length-1; i >= 0; i--) {
	System.out.printf("N[%d] = %d\n", (v.length-1-i), v[i]);
}

Saída:

N[0] = 6
N[1] = 5
N[2] = 4
N[3] = 3
N[4] = 2
N[5] = 1

E você saberia me dizer o que está de errado no meu programa ? Eu gostaria de entender também.

1 curtida

Se for apenas para imprimir, o problema é que vc está alterando os valores das posições do array v.

1 curtida

Está imprimindo errado, o ideal seria imprimir depois do vetor estar pronto.
Fazendo uma simulação com [1,2,3,4,5,6]

j  vetor          imprime
0  [6,2,3,4,5,1]  6
1  [6,5,3,4,2,1]  5
2  [6,5,4,3,2,1]  4 // deveria terminar aqui
3  [6,5,3,4,2,1]  4
4  [6,2,3,4,5,1]  5
5  [1,2,3,4,5,6]  6

Dá uma impressão que o vetor está [6,5,4,4,5,6] mas na verdade está [1,2,3,4,5,6]

1 curtida

Oi @Passarelli se ao final do processo você quer obter um array modificado, o problema está no seu segundo for!

public static void main(String[] args) {
    int vetor[] = new int[] {1,2,3,4,5,6};

    System.out.println("Vetor antes:");
    for (int i = 0; i <vetor.length; i++) {
	 System.out.printf("N[%d] = %d\n", i, vetor[i]);
    }

    //Responsável pela troca!
   //Corresponde ao segundo for que você criou!
   int x = 0;
   int y = vetor.length -1;

   while(x < y){
       //faz a troca
       int temp = vetor[x];
       vetor[x] = vetor[y];
       vetor[y] = temp;

       x++;
       y--;
   }

   System.out.println("\nVetor Depois:");
   for (int i = 0; i < vetor.length; i++) {
	 System.out.printf("N[%d] = %d\n", i, vetor[i]);
   }
}

O que está acontecendo no while:
OBS: os valores em negrito serão trocados.

x++ y-- x < y Vetor
0 5 True 1 2 3 4 5 6
1 4 True 6 2 3 4 5 1
2 3 True 6 5 3 4 2 1
3 2 False 6 5 4 3 2 1
1 curtida