Ajuda com ordenação de vetores

3 respostas
S

Ola gente, to com um problema na hora de ordenar o vetor, devido ao mesmo ser uma classe interna, não sei como proceder nesse caso,
pois no exercicio eu preciso achar o nome da pessoa mais alta, para isso é necessario ordenar as alturas, confere? ou tem outra lógica para isso que eu não estou sabendo fazer ?
(não posso fazer uso nem de ArrayList, e nem de metodos como sort, ja que se trata de um exercicio para faculdade), segue o problema:

public class Exercicio {
	
	static Scanner scanner = new Scanner(System.in);
	
	static public class Pessoa {
		
		String nome;
		double altura;
		
	}
	
public static void main(String[] args) {
	System.out.println("Digite a quantidade de pessoas que serão cadastradas");
	int nPessoas = scanner.nextInt();

	Pessoa[] pessoas = new Pessoa[nPessoas];
	inserePessoas(pessoas);
        ordenaAltura(); // ????????????????

}


// Metodo de ordenação para um vetor normal, como modifica-lo para ordenar Pessoa[].altura ?
public static Pessoa[] ordenaAltura(Pessoa[] vet){	
	for(int i = vet.length; i>= 1; i--){
		for(int j = 1; j < i; j++){
			if (vet[j - 1] > vet[j]){
			 int aux = v[j];
                         v[j] = v[j-1];
                         v[j-1] = aux;
			}
		}
	}
	
	return vet;
	
}

3 Respostas

Rodrigo_Sasaki

Ué, por que não compara a altura diretamente? ao invés de fazer if (vet[j - 1] > vet[j]) Faça if (vet[j - 1].altura > vet[j].altura)Não cheguei a olhar seu algoritmo, mas assim você pelo menos vai comparar o atributo certo :slight_smile:

C

Não precisa ordenar, basta encontrar a mais alta.

Pessoa aux = new Pessoa();
aux = pessoas[0];
for (i = 1; i < pessoas.length(); i++){
     if (pessoas.altura > aux.altura){
            aux = pessoas[i];
     }
}

aux vai ter a maior altura, ai é só imprimir o aux.nome;

E

Para achar o maior valor de um conjunto, não é preciso ordená-lo. Basta percorrer o conjunto elemento por elemento, e comparar com o maior que você já achou. Vou dar um exemplo.

Digamos que você tenha os valores 1.80, 1.90, 1.70, 1.60, 2.00

Pegue o primeiro: o maior até agora é 1.80
O próximo é 1.90; como é maior que 1.80, o maior até agora é 1.90
O próximo é 1.70; como é menor ou igual que 1.90, deixe quieto (o maior até agora é 1.90)
O próximo é 1.60; como é menor ou igual que 1.90, deixe quieto (o maior até agora é 1.90)
O próximo é 2.00; como é maior que 1.90, o maior até agora é 2.00
Como acabaram as alturas, a altura máxima é 2.00

Transforme isso em um programa.

Criado 11 de dezembro de 2012
Ultima resposta 11 de dez. de 2012
Respostas 3
Participantes 4