Ir ao conteúdo
  • Cadastre-se

Ajuda em JAVA


ForThe

Posts recomendados

Bom gente, tenho que desenvolver o seguinte código java pra escola:

Escreva um algoritmo que leia um vetor de 20 posições e mostre- o. Em seguida, troque o primeiro elemento com o último, o segundo com o penúltimo, o terceiro com o antepenúltimo, e assim sucessivamente. Mostre o novo vetor depois da troca.

Já*fiz, só que na hora de inverter ele inverte até a metade.

O código está abaixo.

package Exercicio3;  

import java.util.Scanner;

import Exercicio3.Exercicio3;

public class Exercicio3 {
int vetor[] = new int[20];
private Scanner sc;

public void lerVetor() {
sc = new Scanner(System.in);

for (int i = 0; i < vetor.length; i++) {
System.out.print("Digite o " + (i + 1) + "º número: ");
vetor[i] = sc.nextInt();
}
}

public void mostrarVetor() {
System.out.print("\nVetores:\n");
for (int i = 0; i < vetor.length; i++) {

System.out.print(vetor[i]+ " ");
}
System.out.print("\n\nNovo vetor:\n");
for(int i=0; i<10; i++)

{

int aux = vetor[i];
vetor[i]=vetor[20-i-1];
vetor[20-i-1]=aux;

System.out.print(vetor[i]+ " ");
}


}
public void executar() {
lerVetor();
mostrarVetor();
}

public static void main(String[] args) {
Exercicio3 ex3 = new Exercicio3();
ex3.executar();
}

}

Alguem*me ajuda a arrumar o erro?

valeu!

Link para o comentário
Compartilhar em outros sites

Olá, tudo bem?

Seu método de inversão da matriz (mostrarVetor) está invertento corretamente.

Acontece que, para a inversão, você faz uma iteração de 10 posições (metade do vetor), e dentro desse mesmo for você imprime os valores. No seu caso, vai mostrar para o usuário somente as 10 primeiras posições. O que você pode fazer é fazer um outro laço, nesse caso até 20 (o melhor é que isso fosse variável também, mas isso é outra história) para imprimir o array de resultado.


...

public void mostrarVetor() {
System.out.print("\nVetores:\n");
for (int i = 0; i < vetor.length; i++) {
System.out.print(vetor[i]+ " ");
}
System.out.print("\n\nNovo vetor:\n");

/* Aqui você itera 10 posições do array, por isso não pode fazer o print aqui dentro, senão vai mostrar só as primeiras 10 posições.
*/
for(int i=0; i<10; i++) {
int aux = vetor[i];
vetor[i] = vetor[20-i-1];
vetor[20-i-1] = aux;
}

// Aqui o vetor está invertido corretamente.
// Agora você pode iterar novamente para mostrar o array já invertido.
for (int i=0; i<20; i++) {
System.out.print(vetor[i]+ " ");
}
}

...

Isso resolve seu problema de mostrar o array invertido.

Como um "plus", tenho algumas sugestões para melhorar um pouco seu código:

1. Faça um método inverteVetor, para a inversão ficar fora do método mostraVetor. Assim, o código fica mais organizado e legível.

2. Deixe o tamanho do array dinâmico. Pode até ser com uma constante ou algo do tipo. Não use o tamanho "hardcodificado" no índice do array, como "vetor[20-i-1]". Ao invés disso, você pode usar "vetor[vetor.length-i] ou vetor[max-i]" sendo max uma constante.

Nos falamos.

Abraços.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...