Como colocar vetor de String em ordem alfabética? Preciso salvar os contatos da agenda ordenados

import java.util.Scanner;
import javax.swing.JOptionPane;

public class Agenda {

static Scanner console = new Scanner(System.in);

// COMEÇO METODO ENTRADA

private static int Entrada(String[] vetor) {
int fim;
do {
fim = Integer.parseInt(JOptionPane.showInputDialog("Quantos contatos deseja adicionar (MAX: 10) ?"));

} while ((fim <= 0) || (fim > 10));
for (int i = 0; i < fim; i++) {

vetor[i] = JOptionPane.showInputDialog("Contato " + (i + 1));

}

return fim;
}

// FIM METODO ENTRADA

// COMEÇO METODO INSERIR
private static int Inserir(String[] vetor, int fim, int posicao, String contato) {
posicao = posicao - 1;
if (fim == 10) {
JOptionPane.showMessageDialog(null, "Não há espaço em sua agenda !");

} else if ((posicao < 0) || (posicao > fim)) {
JOptionPane.showMessageDialog(null, "Posição inexistente !");

} else {
for (int i = fim - 1; i >= posicao; i--) {

vetor[i + 1] = vetor[i];

}
vetor[posicao] = contato;
fim = fim + 1;
JOptionPane.showMessageDialog(null, "Inserido com sucesso!");

}

return fim;
}
// FIM METODO INSERIR

// COMEÇO METODO ACESSAR

private static String Acessar(String[] vetor, int fim, int posicao) {

String contato;
if ((posicao < 0) || (posicao > fim)) {

contato = "";
} else {

contato = vetor[posicao - 1];
}
return contato;

}

// FIM METODO ACESSAR

// COMEÇO METODO REMOVER

private static int Remover(String[] vetor, int fim, int posicao) {
String contato = "";
posicao = posicao - 1;
if (fim == 0) {
JOptionPane.showMessageDialog(null, "Não há contatos em sua agenda");

}
if ((posicao < 0) || (posicao > fim))
JOptionPane.showMessageDialog(null, "Posição inválida");
else {

contato = vetor[posicao];
for (int i = posicao; i < fim - 1; i++) {

vetor[i] = vetor[i + 1];
}

fim = fim - 1;
JOptionPane.showMessageDialog(null, "Remoção efetuada com sucesso! O contato removido da lista foi : " + contato);
}

return fim;
}

// FIM METODO REMOVER

// COMEÇO METODO LISTAR

private static void Listar(String[] vetor, int fim) {
String list = "";
for (int i = 0; i < fim; i++) {
list = list + "\n " + (i + 1) + " - " + vetor[i];
}
JOptionPane.showMessageDialog(null, list);
}
// FIM METODO LISTAR

// COMEÇO METODO LISTAR POR LETRA

private static String ListarLetra(String[] vetor, int fim, String aux) {

String filt = JOptionPane.showInputDialog("Deseja filtrar por qual letra ? ");	
for (int i = 0; i < fim; i++) {
String letra = vetor[i].substring(0, 1);
if (letra.equals(filt))
aux = (i+1) + "-" +vetor[i] +"\n" + aux;	
}	
return aux;
}

// FIM METODO LISTAR POR LETRA

public static void main(String[] args) {
// TODO Auto-generated method stub

String[] vetor = new String[10];
String contato, filtro, comp;
int opcao, fim = Entrada(vetor), posicao;

do {
do {
opcao = Integer.parseInt(JOptionPane.showInputDialog("Suas opções são :" + " \n \n 1 - Acessar\n"
+ "2 - Inserir\n" + "3 - Remover\n" + "4- Listar\n" + "5 - Listar Por Inicial\n" + "6 - Sair"));

} while ((opcao < 1) || (opcao > 6));

switch (opcao) {

case 1:
posicao = Integer.parseInt(JOptionPane.showInputDialog("Qual a posição do que contato deseja acessar"));
contato = Acessar(vetor, fim, posicao);

if (contato == "")
JOptionPane.showMessageDialog(null, "Não há contatos nesta posição !");

else
JOptionPane.showMessageDialog(null, "O contato da posição " + (posicao) + " é : " + contato);

break;

case 2:
posicao = Integer.parseInt(JOptionPane.showInputDialog("Em qual a posição deseja inserir ?"));
contato = JOptionPane.showInputDialog("Insira o contato : ");
fim = Inserir(vetor, fim, posicao, contato);

break;

case 3:
String list = "";
for (int i = 0; i < fim; i++) {
list = list + "\n " + (i + 1) + " - " + vetor[i];
}
posicao = Integer.parseInt(JOptionPane.showInputDialog("Qual contato deseja remover\n \n" + list));
fim = Remover(vetor, fim, posicao);

break;

case 4:
Listar(vetor, fim);

break;

case 5:
String aux="";
String la = ListarLetra(vetor, fim, aux);
JOptionPane.showMessageDialog(null, la);
break;
}

} while (opcao != 6);
console.close();
}

}
Arrays.sort(nomeDoArray);
1 curtida

Cara mas já tentei e não consigo, importei o java arrays tudo bonitinho Soq não vai de jeito nenhum…
Na hora que o programa vai executar a linha contendo esse comando ele fecha na hora meu JOptionPane …
Será que tem um lugar certo pra por ele ?

Claro que vai! Você perguntou: como ordenar um vetor (ou array) de Strings, e a resposta é essa:

String[] letras = {"d", "b", "c", "a"};
Arrays.sort(letras);
System.out.println(Arrays.toString(letras));
// imprime [a, b, c, d]

Agora, você tá misturando código de UI com lógica de negócio. O fato de você ordenar o array não tem nada a ver com o que aparece na tela.

Tente atualizar a tela depois de ordenar o array, se você quer que a mudança apareça.

1 curtida

Valeu cara ajudou muito !

Essa maneira que encontrei para organizar além do sort !

String aux = “”;

		for (int x = 0; x < fim; x++)
			for (int y = 0; y < fim; y++) {

				if (vetor[x].charAt(0) < vetor[y].charAt(0)) {
					aux = vetor[y];
					vetor[y] = vetor[x];
					vetor[x] = aux;
				}

Dá na mesma, com uma diferença: o Collections.sort é muito mais eficiente. Esse algoritmo que você fez é O(nˆ2), enquanto o Collections.sort é O(n*lg(n)) no pior caso, mas caso o vetor já esteja quase ordenado, é O(n).

1 curtida