Dúvidas com vetores!

4 respostas
The_Punisher

Bom dia galera, preciso de uma ajuda com vetores, estou tendo dificuldades para inverter os valores das posições, meu vetor contem 20 posições e no exercício que o professor pediu é +/- assim:

valor da posição 1, passa para posição 20
valor da posição 20, passa para posição 1.

Consegui fazer um skema:

import java.util.Scanner;

public class ExercVetorC{
	public static void main(String[] args){
		
		Scanner entrada = new Scanner(System.in);		
		
		int[] vetor = new int[20];
		int numero, inverteVetor=0;

		System.out.println("Informe uma quantidade de 20 valores:");
		System.out.println("");

		for(int posicao=0; posicao<20; posicao++){
			System.out.println("Informe um valor");
			numero = entrada.nextInt();

			vetor[posicao] = numero;
			inverteVetor = vetor[posicao];			
		}

		System.out.println("");

		for(int posicao=0; posicao<20; posicao++){
			vetor[posicao] = inverteVetor--;		
			System.out.println("Posicao do Vetor: " + posicao + " - Valor: " + vetor[posicao]);
		}
	}
}

Só que esse método resolveu até certo ponto, se eu deteminar os número em ordem crescente, ele me mostra a ordem inversa certinho, mas se faço o contrário, os valores retornados são negativos.

Resumidamente o que preciso fazer é resgatar os valores inseridos pelo usuário, armazená-los nesse vetor e inverter sua ordem.

Por favor, alguém poderia me ajudar nessa?

Vlw e abraço!

4 Respostas

dalvac

Seu código está quase todo certo!
Aí vai o código corrigido:

import java.util.Scanner;  
      
    public class ExercVetorC{  
        public static void main(String[] args){  
              
            Scanner entrada = new Scanner(System.in);         
              
            int[] vetor = new int[20];  
            int numero, inverteVetor=0;  
     
           System.out.println("Informe uma quantidade de 20 valores:");  
           System.out.println("");  
     

           for(int posicao=0; posicao<20; posicao++){  
               System.out.println("Informe um valor");  
               numero = entrada.nextInt();  
               vetor[posicao] = numero;  
           }  
     
           System.out.println("");  
     
           //inverte o vetor
           for(int posicao=0; posicao<10; posicao++){  
                   int temp = vetor[posicao];
                   vetor[posicao] = vetor[19-posicao];
                   vetor[19-posicao] = temp;
           }  
    
           for(int posicao=0; posicao<20;posicao++){
                   System.out.println("Posicao do Vetor: " + posicao + " - Valor: " + vetor[posicao]);  
           }
     }  
  }

Abs!

Tsunami1

O que esta acontecendo com o seu algoritimo: Isso só é aplicavel (como vc mesmo dissse) se o usuario escrever numeros em ordem crescente… E o que aconteceria se o usuário não passasse os 20 numeros em sequencia, ou seja, aleatorios?!
O que vc deve fazer (na minha opinião de noob rsrsrs) é ler o vetor inteiro e depois criar um vetor secundário invertido…

Exemplo:

import java.util.Scanner;

public class VetorInvertido 
{

	public static void main(String[] args)
	{
		int[] vetor = new int[20];
		int[] vetorInvertido = new int[20];
		int posicao=0;
		Scanner input = new Scanner(System.in);
		
		System.out.println ("Digite os 20 numeros: ");
		for (posicao=0; posicao<20; posicao++) // leitura do vetor
		{
			vetor[posicao] = input.nextInt();
		}
		
		posicao=0;
		for (int posicaoInversa=vetor.length-1; posicaoInversa>=0; posicaoInversa--) // copia do vetor de forma inversa
		{
			vetorInvertido[posicaoInversa] = vetor[posicao];
			posicao++;
		}
		
		for (int pos=0; pos<vetorInvertido.length; pos++) // mostra o vetor invertido.
		{
			System.out.println (vetorInvertido[pos]);
		}
	}

}

Claro que o codigo acima precisa d otimização, mas roda =)

Motivo do EDIT:

Vi o codigo do Dalvac e percebi que esqueci de dizer uma coisa: No meu codigo estou criando um outro vetor invertido pra manter intacto o original, isso ocupa o dobro de memoria do que o do Dalvac, mas serve pra aplicações básicas como exercícios, se vc quer algo mais profissional procura fazer um vetor só (como no exemplo do dalvac) e reduzir os laços for ao maximo…

Espero ter ajudado mesmo tendo pouca bagagem em Java, abrçs…

claudneto

Realmente, como o Tsunami disse, criar outro vetor é besteira em casos profissionais, mas como exercício, no começo é aceitável.

Se você está fazendo faculdade, no futuro você verá coisas sobre como otimizar seu algoritmo com base em tempo de execução ou locação de memória. Daí você precisará pensar em memória, mas no começo, não.

The_Punisher

vlw pela ajuda rapaziada, mas quanto ao que o tsunami disse sobre o usuário inserir numeros aleatórios, eu testei e ele mostra, mas como tive de testar o código com qualquer hipótese, deu erro na forma de inserção decrescente, mas seguindo as explicações de vcs e a solução do dalvac, consegui arrumá-lo.

vlw msm, abraços.

Criado 14 de outubro de 2008
Ultima resposta 14 de out. de 2008
Respostas 4
Participantes 4