Oi,
Dei uma pesquisada aqui antes e não achei nada que me ajude, e tambem estou num caso bem especifico. O exercicio pede que eu crie um vetor(array) de string e ordene eles. Só que não posso usar Arraysort, tem que ser na mão mesmo.
O que eu fiz foi o seguinte, aqui vai um treixo do algoritmo.
...
for (int i = 0; i < n.length; i++) {
nome[i] = JOptionPane.showInputDialog("Nome");
idade[i] = Integer.parseInt(JOptionPane.showInputDialog("Idade"));
sexo[i] = JOptionPane.showInputDialog("Sexo M/F").charAt(0);
}
...
int questao = Integer.parseInt(JOptionPane.showInputDialog("Ordenar por nome: 1"
+ " \nOrdenar por idade: 2"
+ "\nFazer busca por nome: 3"
+ " \nNome do mais idoso: 4 "
+ "\nMedia da idade dos homens: 5"
+ "\nTotal de mulheres: 6"));
if (questao == 1) {
String nomeAux;
int idadeAux;
char sexoAux;
for (int i = 0; i < nome.length; i++) {
for (int j = 0; j < nome.length - i - 1; j++) {
if (nome[j].charAt(0) == nome[j + 1].charAt(0)) {
if (nome[j].length() <= nome[j + 1].length()) {
for (int k = 1; k < nome[j].length(); k++) {
if (nome[j].charAt(k) > nome[j + 1]
.charAt(k)) {
nomeAux = nome[j + 1];
nome[j + 1] = nome[j];
nome[j] = nomeAux;
idadeAux = idade[j + 1];
idade[j + 1] = idade[j];
idade[j] = idadeAux;
sexoAux = sexo[j + 1];
sexo[j + 1] = sexo[j];
sexo[j] = sexoAux;
}
}
} else {
for (int k = 1; k < nome[j+1].length(); k++) {
if (k == (nome[j+1].length()-1)) {
if (nome[j].charAt(k) > nome[j+1].charAt(k)) { // problema aqui
nomeAux = nome[j + 1];
nome[j + 1] = nome[j];
nome[j] = nomeAux;
idadeAux = idade[j + 1];
idade[j + 1] = idade[j];
idade[j] = idadeAux;
sexoAux = sexo[j + 1];
sexo[j + 1] = sexo[j];
sexo[j] = sexoAux;
}
} else {
if (nome[j].charAt(k) > nome[j+1].charAt(k)) { // problemas aqui
nomeAux = nome[j + 1];
nome[j + 1] = nome[j];
nome[j] = nomeAux;
idadeAux = idade[j + 1];
idade[j + 1] = idade[j];
idade[j] = idadeAux;
sexoAux = sexo[j + 1];
sexo[j + 1] = sexo[j];
sexo[j] = sexoAux;
}
}
}
}
} else if (nome[j].charAt(0) > nome[j + 1].charAt(0)) {
nomeAux = nome[j + 1];
nome[j + 1] = nome[j];
nome[j] = nomeAux;
idadeAux = idade[j + 1];
idade[j + 1] = idade[j];
idade[j] = idadeAux;
sexoAux = sexo[j + 1];
sexo[j + 1] = sexo[j];
sexo[j] = sexoAux;
}
}
}
for (int i = 0; i < nome.length; i++) {
saida += "Nome: " + nome[i] + " " + idade[i]
+ " anos sexo: " + sexo[i] + "\n";
}
JOptionPane.showMessageDialog(null, saida);
Tipo, Ele de cara ja ordena caso a primeira letra seja diferente, agora, estou tendo problemas para ordenar quando a palavra é quase igual. Não sei porque mas esta dando alguns problemas de outofbounds onde esta comentado “// problemas aqui” Primeiro eu não estou sabendo porque esta estourando o algoritmo.
É por causa dessa linha?
for (int j = 0; j < nome.length - i - 1; j++) {
E não estou conseguindo ordenar strings com mesmos caracteres e com tamanhos diferentes.
Por exemplo, na sequencia eu coloco: “aaaa”; “aaa”; “aa” e “a”. O programa não esta colocando os strings que tem menos caracteres em primeiro lugar,o resultado final esta dando:
nome[0] = aaaa
nome[1] = aaa
nome[2] = aa
nome[3] = a
Gostaria que fosse ao contrario mas não estou sabendo implementar isso.
Bom, se alguem puder me ajudar em alguma parte eu agradeço, estou tentando aqui.
vlw