[Resolvido]Duvida Ordenar Vetor

19 respostas
M

Olá, estou tentando fazer um código para ordenar o vetor da seguinte maneira:primeiro os números ímpares em ordem crescente, depois os números pares em ordem decrescente - um valor por linha, porém até agora não tive sucesso, poderiam me ajudar, o codigo que estou fazendo segue abaixo:

import java.util.Arrays;

public class TesteArray {
	public static void main(String[]args){
		TesteArray array = new TesteArray();
		array.executaArray();
	}
	void executaArray(){
		ordenaArray(new int[]{1, 5, 4, 8, 1002, -12, 3, -24});
	}
	
	void ordenaArray(int x[]){
		Arrays.sort(x);
		
		for(int i =0;i<=x.length;i++ ){
			Arrays.sort(x);
				if(x[i]%2!=0){
					System.out.println(x[i]);
				}
				if(x[i]%2==0){
					System.out.println(x[i]);
				}

				
			
			
			
		}
	}

}

19 Respostas

Rodrigo_Sasaki

O que está acontecendo de errado? O que seu método imprime ao final ?

M

Então, ele imprime a seguinte sequencia:
-24
-12
1
3
4
5
8
1002

Era para imprimir os numero impares primeiro em forma crescente depois os pares em forma decrescente, e ainda da uma exceção na linha 8.

Rodrigo_Sasaki

if(x[i]%2!=0){ System.out.println(x[i]); } if(x[i]%2==0){ System.out.println(x[i]); }Nesse código você pergunta se o número é impar pra imprimir, se não for, pergunta se é par, logicamente, o número sempre será impresso.

você precisa separar os números, ou criando 2 arrays, adicionando os ímpares em um, os pares em outro,
ou ter algum tipo de controle pra saber se os ímpares ja foram todos impressos, pra poder começar a imprimir os pares.

S

Acho que você vai precisar de 2 fors.

M

Então galera, mudei a estrutura do código, porém agora so imprime os numero pares.

Arrays.sort(x);
		
		for(int i =0;i<=x.length;i++ ){
			if(x[i]%2!=0){
				System.out.println(x[i]);
				
			}
		}
		for(int y =0;y<=x.length;y++ ){
			if(x[y]%2==0){
				System.out.println(x[y]);
			}
		}
Rodrigo_Sasaki

tente debugar seu código pra ver onde está o problema, porque seu for para imprimir os ímpares parece correto.

ah, você pode usar int i nos 2 fors se quiser, ja que eles não estão encadeados.

M

Então tentei novamente, mas sem sucesso, a unica coisa que aparece é a exceção, mas continua imprimindo so os numeros impares(Falei errado no outro post,ehhehe).

F

Qual o tanho de um vetor?

Por exemplo: Quando faço int[] x = new int[5];
O tamanho dele é 5, de 0 a 4 certo? Portanto quando vc faz seu for (int i=0; i <= x.length; x++) vc está percorrendo de 0 a 5 e não de 0 a 4.
Isto gera uma excessão de indexOutOfBounds, ou seja, vc está tentando acessar uma posição que não foi alocada.

Portanto, o certo no for é: for (int i = 0; i < x.length; i++)

Testa aí. E partindo disso vc consegue fazer de forma decrescente tb.

M

felipeaps:
Qual o tanho de um vetor?

Por exemplo: Quando faço int[] x = new int[5];
O tamanho dele é 5, de 0 a 4 certo? Portanto quando vc faz seu for (int i=0; i <= x.length; x++) vc está percorrendo de 0 a 5 e não de 0 a 4.
Isto gera uma excessão de indexOutOfBounds, ou seja, vc está tentando acessar uma posição que não foi alocada.

Portanto, o certo no for é: for (int i = 0; i < x.length; i++)

Testa aí. E partindo disso vc consegue fazer de forma decrescente tb.

Então, tentei fazer o seguinte para orderna em forma decrescente, mas sem sucesso, Da a exceção ainda:

for(int i =x.length;i>0;i++ ){
			if(x[i]%2==0){
				System.out.println(x[i]);
			}
		}

Desculpa pela ignorância, heheheehe

guilherme.dio

Acredito que vc esteja fazendo a ordenação na mão, para questões de aprendizado e lógica…

Se futuramente precisar ordenar algo, utilize o framework Collections do Java, fica muito mais fácil trabalhar com conjuntos de valores e ordenação(sort).

M

guilherme.dio:
Acredito que vc esteja fazendo a ordenação na mão, para questões de aprendizado e lógica…

Se futuramente precisar ordenar algo, utilize o framework Collections do Java, fica muito mais fácil trabalhar com conjuntos de valores e ordenação(sort).

Para falar a verdade estou tentando dos dois modos, primeiro quero fazer na mão mesmo, depois fazer usando as collections, to tentando ainda.

mas uma pergunta o collections.sort() não serve so para arrayList?

F

Então, tentei fazer o seguinte para orderna em forma decrescente, mas sem sucesso, Da a exceção ainda:

for(int i =x.length;i>0;i++ ){
			if(x[i]%2==0){
				System.out.println(x[i]);
			}
		}

Desculpa pela ignorância, heheheehe

Cara, vc não prestou atenção no que eu te disse. O que vc precisa fazer?
Se vc tem um vetor de 5 posições, vc precisa ir de 4 a 0 para ordenar de forma decrescente.
Neste seu código vc começa na posição 5 (o que já está errado), pede para parar o loop na posição 1 (i > 0, também está errado) e ainda incrementa o i (i++),
sendo que vc quer ir para trás e não pra frente.

Pensa mais um pouco aí.

guilherme.dio

Michael Myers:
guilherme.dio:
Acredito que vc esteja fazendo a ordenação na mão, para questões de aprendizado e lógica…

Se futuramente precisar ordenar algo, utilize o framework Collections do Java, fica muito mais fácil trabalhar com conjuntos de valores e ordenação(sort).

Para falar a verdade estou tentando dos dois modos, primeiro quero fazer na mão mesmo, depois fazer usando as collections, to tentando ainda.

mas uma pergunta o collections.sort() não serve so para arrayList?

Não.

O método sort() da Collections, funciona para todas as classes que implementam a interface List.

M

guilherme.dio:
Michael Myers:
guilherme.dio:
Acredito que vc esteja fazendo a ordenação na mão, para questões de aprendizado e lógica…

Se futuramente precisar ordenar algo, utilize o framework Collections do Java, fica muito mais fácil trabalhar com conjuntos de valores e ordenação(sort).

Para falar a verdade estou tentando dos dois modos, primeiro quero fazer na mão mesmo, depois fazer usando as collections, to tentando ainda.

mas uma pergunta o collections.sort() não serve so para arrayList?

Não.

O método sort() da Collections, funciona para todas as classes que implementam a interface List.

Entendi.

Então galera estou tentando aqui, fazer a ordenação na mão mas está complicado,ehehehe.
Agora so da exceção no codigo:

for(int i =x.length;i>0;i++ ){
			if(x[i]%2==0){
				System.out.println(x[i]);
			}
		}
M

Então galera tem alguma dica ai?
Estou tentando aqui ainda, e essa foi o unico modo que encontrei para fazer na mão, fazer o “for começar de tras para frente”

E
for(int i =x.length;i>0;i++ ){  
            if(x[i]%2==0){  
                System.out.println(x[i]);  
            }  
        }

Para fazer um laço “for” que anda de trás para frente, use:

for (int i = x.length - 1; i >= 0; --i){  
    if(x[i]%2==0) {  
        System.out.println(x[i]);  
    }  
}
G

faz 2 vetores e organiza eles em ordem, tipo 1 vetor par e um vetor impar, ambos ordenados por ordem crescente, ai ao inves de imprimir um por um vc imprime tudo no final, vetor impar depois vetor par

M

entanglement:
for(int i =x.length;i>0;i++ ){ if(x[i]%2==0){ System.out.println(x[i]); } }

Para fazer um laço “for” que anda de trás para frente, use:

for (int i = x.length - 1; i >= 0; --i){ if(x[i]%2==0) { System.out.println(x[i]); } }

Então agora consegui, valeu ae velho, valeu mesmo heheh.

Então irei tentar fazer desse modo também, mas ve se entendi, eu pego o vetor que recebi como parametro,depois eu uso o for para percorrer, e guardo os valores impares em um outro vetor, e faço a mesma coisa com os numero pares, depois imprimo tudo junto, assim por exemplo:

System.out.println(x[i]);

System.out.println(y[i]);
G

Exatamente, não deve ser a opção mais correta, mas deve funcionar

Criado 8 de maio de 2012
Ultima resposta 9 de mai. de 2012
Respostas 19
Participantes 7