Amigos, estou com um probleminha para ordenar um vetor. Tenho uma classe Aluno, que tem como propriedades as variáveis nota(double) e nome(String). Meu problema é ao ordenar esse vetor de objetos Aluno em ordem crescente, por nome. Por exemplo, com os nomes Roger, Abelha e Zebra, após ordenar, ficaria Abelha, Roger e Zebra (Não consegui pensar em nenhum nome com Z! :roll: )
O meu algorítmo de “Bubblesort” é o seguinte:
public void ordenarNomeCre(Aluno[] v) { //Método de ordenação de nomes de forma crescente
boolean trocou = true;
while (trocou) {
trocou = false;
for (int i = 0; i < v.length - 1; i++) {
if (v[i].getNome().compareTo(v[i + 1].getNome()) > 0) {
Aluno aux = v[i];
v[i] = v[i + 1];
v[i + 1] = aux;
trocou = true;
}
}
}
}
Usei esta mesma lógica para ordenar o meu vetor de Alunos pela nota, de forma crescente e decrescente, e funcionou perfeitamente, porém (obviamente), não utilizando o compare to e pegando a nota ao invés do nome, dessa forma:
if (v[i].getNota() > v[i + 1].getNota())
Esse método de ordenação de nomes em ordem crescente ordena quase certo, mas algumas coisas ficam fora da ordenação. Para inicializar esse vetor de objetos e eu nao precisar cadastrar todos os alunos (em uma outra classe), eu coloquei um for antes de rodar esse método atribuindo um valor randômico (0 a 50) para o nome e a nota, para cada posição do vetor, dessa forma:
for (int i = 0; i <= 9; i++) {
Disciplina.alunos[i] = new Aluno(""+(Math.random()*50), 0+(Math.random()*50));
}
Em um exemplo de funcionamento da classe, obtive o seguinte resultado:
1.5731317866865713
13.657274245610578
25.396175021708657
3.817491875022583
3.8310135853330154
38.41939612141305
39.491764535307645
43.42128443076351
43.79810772111325
47.17088292162792
Como podem ver, começou ordenando e depois alguns valores ficaram fora da ordem. Eu entendi que o problema é que o meu método sempre compara a posição atual com a próxima, talvez teria que comparar a posição atual com todas as outras, não sei. Gostaria que me ajudassem com essa questão, pois estou bem perdido.
Desde já obrigado