Dúvida na inversão de vetores

Olá. Espero que todos estejam bem. Estou começando a aprender Java e ao tentar fazer o exercício:

Faça um programa que preencha um vetor com 8 elementos, e inverta esse mesmo vetor,
trocando o primeiro elemento pelo último, o segundo pelo penúltimo, e assim por diante.
Exemplo:
vetor [ 1, 2, 3, 4, 5, 6, 7, 8] => vetor [ 8, 7, 6, 5, 4, 3, 2, 1]

Fiz o seguinte código:

public class list3Ex1{

public static void main(String[] args){

    int [] a = {1,2,3,4,5,6,7,8};

    int [] b = {};

    for (int i=7, j=6; i<7; i++, j--){

        b[j] = a[i];

    }

    for (int i=7; i<7; i++){

    }



    System.out.println("Inversão do vetor a:  " + b);

  

}

}

Ao compilar o código aparece assim: Inversão do vetor a: [I@7637f22

Para imprimir um vetor na tela use Arrays.toString().

Exemplo:
System.out.println("Array: " + Arrays.toString(b));

1 curtida

Executei esse comando e ele imprimiu o Vetor vazio: []

int[] b = new int[8];

1 curtida

Deu certo Edson.
Muito obrigado cara, você sempre é muito solicito. Deus abençoe.

[8,7, 6, 5, 4, 3, 2, 1, 0]

1 curtida

Só um detalhe, em vez de usar um tamanho fixo, seria melhor usar o mesmo tamanho do outro array:

int[] b = new int[a.length];

O mesmo vale para o for, prefira usar a.length em vez de um valor fixo, assim se o tamanho de a mudar, você não precisa ficar atualizando o restante do código.

E aproveitando, daria para fazer assim:

int[] b = new int[a.length];
for (int i = 0; i < a.length; i++) {
    b[a.length - i - 1] = a[i];
}
1 curtida

Você está criando um vetor novo, não está invertendo o mesmo.

Veja seu código refatorado:

import java.util.Arrays;

public class list3Ex1 {

    public static void main(String[] args) {
        int[] a = { 1, 2, 3, 4, 5, 6, 7, 8 };
        System.out.println("Vetor:            " + Arrays.toString(a));
        inverter(a);
        System.out.println("Vetor invertido:  " + Arrays.toString(a));
    }

    private static void inverter(int[] array) {
        int meio = array.length / 2;
        for (int inicio = 0, fim = array.length - 1; inicio < meio; inicio++, fim--) {
            int numero = array[inicio];
            array[inicio] = array[fim];
            array[fim] = numero;
        }
    }
}
1 curtida

Entendi, mas é possível resolver esse exercício sem criar um o método “inverter” ???
O professor passou esses exercícios mas nas aulas não comentou sobre criar novos métodos para resolver os problemas. Acredito que eu tenha que tentar resolver somente dentro do"public static void main(String[] args)" e não criar o “private static void inventer”.
É possível ?

Dica muito top e útil Hugo.
Valeu.

Ué, é só fazer tudo que tá dentro do método, só que com o array a :man_shrugging:

public static void main(String[] args) {
    int[] a = { 1, 2, 3, 4, 5, 6, 7, 8 };
    int meio = a.length / 2;
    for (int inicio = 0, fim = a.length - 1; inicio < meio; inicio++, fim--) {
        int numero = a[inicio];
        a[inicio] = a[fim];
        a[fim] = numero;
    }
}
2 curtidas