Strings em ordem alfabética

Olá,
Quero criar um aplicativo que leia vários nomes e apresente-os em ordem alfabética.
Primeira dúvida- eu não sei quantos nomes serão lidos, logo não posso criar um determinado número de variáveis para armazenar esses nomes, como guardá-los ?

Segunda dúvida - como mostrar esses nomes em ordem alfabética ?

Observação : Não quero código pronto, apenas ajuda, muito obrigado à todos, um abraço.

Primeira dúvida- eu não sei quantos nomes serão lidos, logo não posso criar um determinado número de variáveis para armazenar esses nomes, como guardá-los ?

Resposta: Você pode criar um Array de Strings, ou um ArrayList, assim vc vai inserindo sem precisar saber o qtde.

Segunda dúvida - como mostrar esses nomes em ordem alfabética ?

Resposta: Ao criar a rotina para ler este Array, deve ter alguma função lá que ordena os dados… eu não me lembro muito bem o nome

Faz assim:

Object[] data = {"Kiwi","Banana","Mango","Aubergine","Strawberry"};
List list = Arrays.asList(data);
Collections.sort(list);
System.out.println(list);

// Resultado [Aubergine, Banana, Kiwi, Mango, Strawberry]
1 curtida

Para a solução dos dois problemas, existe uma estrutura de dados pronta no Java, chamada SortedSet. (java.util.SortedSet). Ela armazena os nomes em ordem alfabética, e não tem limitação para o número de nomes.

Exemplo de uso:

import java.util.*;
...
SortedSet<String> ss =  new TreeSet<String>();
ss.add ("Luis Inacio");
ss.add ("Fernando Henrique");
ss.add ("Jose Serra");
ss.add ("Carlos Apolinario");
ss.add ("Amadeu Aguiar");
...
System.out.println (ss); // deve imprimir algo como:
// {Amadeu Aguiar, Carlos Apolinario, Fernando Henrique, Jose Serra, Luis Inacio}
1 curtida

Use um TreeSet(ele não vai permitir duplicidade).
Se houver duplicidade, use como citado acima um ArrayList e depois Collections.sort(List) para ordená-los.

Primeira dúvida - Usa um ArrayList pra você poder adicionar e remover itens dinâmicamente.

Segunda dúvida - Use Collection.sort(List) pra ordenar sua lista.

Abraços,

Certo, mas o usuário que digitará os nomes, como fazer com que os nomes que o usuário digitar sejam armazenados ?
Obrigado pela atenção.

Nunca usei nem sei usar ArraysList, vou pesquisar algo sobre, obrigado pelas informações, abraços.

Se você quiser aprender um pouco mais, para que em alguma outra situação precisar fazer ordenação de uma maneira diferente, de uma olhada em Comparator ou Comparable, implemente elas e passe no metodo sort do seu ArrayList.
Assim você pode ordenar da maneira que quiser…

[code]ArrayList nomeList = new ArrayList();
Scanner sc = new Scanner(System.in);

System.out.println("Digite o nome: ");
String nome = sc.nextLine();

nomeList.add(nome);[/code]

1 curtida

Valeu Pimento , isso ajudou bastante.

eu fiz isso :

import java.util.*;
public class Alunos {
	public static void main (String[] args) {

		ArrayList Alunos = new ArrayList();
		Scanner sc = new Scanner(System.in);
		
		 for( ; ; ) {

		  System.out.println("Digite o nome: ");
		  String nome = sc.nextLine();
		  if(nome.equals("")){ 
		    System.exit(0); 
		  }
		  Alunos.add(nome);
		}
		 Collections.sort(Alunos);  
		 System.out.println(Alunos); 
		
		 

  }
}

mas a parte do Collections.sort está dando erro, provavelmente estou usando de forma errada, alguém pode me explicar como usá-la ?

1 curtida

Deu certo, o que estava errado não era o collections e sim o System.exit(0); troquei ele por break e deu certo.
Muito obrigado pela ajuda de todos.

Só mais uma dúvida, se por exemplo eu quiser mostrar na frente de cada aluno, uma média ( informada pelo usuário), há uma maneira de fazer isso ?

Faça um segundo ArrayList chamado notasList ou qualquer outra coisa e peça para o usuário, logo depois de digitar o nome do aluno, digitar a nota.

Nota no índice 0 corresponde ao aluno no índice 0, nota no índice 1 corresponde ao aluno no índice 1, e assim sucessivamente…

Abraços,

Ok, eu tinha feito mais ou menos isso, pedi o nome e depois a nota, mas na hora de mandar mostrar os nomes seguidos das notas como eu faço para falar que ele o programa tem que mostrar primeiro o nome 0 seguido da nota 0, eu fiz assim, mas ele mostra primeiro os alunos, depois as notas:

import java.util.*;
import javax.swing.*;
public class Alunos {
	public static void main (String[] args) {

		ArrayList Alunos = new ArrayList();
		ArrayList Nota1 = new ArrayList();
				
		String nome;
		String nota;
		
		
		 for( ; ; ) {

		  nome = JOptionPane.showInputDialog(null, "Digite o nome: ");
		  nota = JOptionPane.showInputDialog(null, "Digite a nota: ");
		  if(nome.equals("")){ 
		    break; 
		  }
		  Alunos.add(nome);
		  Nota1.add(nota);
		}
		 Collections.sort(Alunos);  
		 JOptionPane.showMessageDialog(null, Alunos +" "+ Nota1); 
		 
		
		 

  }
}

O sort aí gera um pequeno problemasso… Quando você organiza os nomes e não organiza as notas aquilo tudo que você digitou passa a não fazer sentido.

Acho que isso daria pra resolver implementando Comparator ou Comparable, mas eu faria da seguinte forma:

1- Armazeno na nomesList os nomes de todos os alunos.
2- Organizo os nomes.
3- Faço um for varrendo a nomesList pedindo pro usuário digitar a nota referente a cada aluno.
4- Imprimo o nome do aluno com a respectiva nota.

Pode ser mais trabalhoso(ou não), mas é assim que eu faria…

Abraços,

Entendi, no segundo for, quando vai mostrar o nome do aluno e pedir a nota, como eu faço para mostrar o nome do aluno1 depois o aluno2 , e aí por diante, e pedir as notas?
ps.: ao final tem que mostrar uma lista com o nome dos alunos e as notas.

Pegar notas:

for(int i = 0; nomesList.size(); i++){ System.out.println("Informe a nota do aluno " + nomesList[i]); notaList[i] = //recebe nota }

Informar lista com nome e nota:

for(int i = 0; nomesList.size(); i++){ System.out.println("Aluno " + nomesList[i] + " tem a nota " + notasList[i]); }

Vê se isso te resolve…

Abraços,

Estão ocorrendo alguns erros:

import java.util.*;
import javax.swing.*;
public class Alunos {
	public static void main (String[] args) {

		ArrayList Alunos = new ArrayList();
		ArrayList Nota1 = new ArrayList();
		ArrayList Nota2 = new ArrayList();
		
		String nome;
		int nota1;
		
		
		 for( ; ; ) {

		  nome = JOptionPane.showInputDialog(null, "Informe o nome do aluno ou aperte <Enter> com o campo em branco para encerrar o programa: ");
		  if(nome.equals("")){ 
		    break; 
		  }
		  Alunos.add(nome);
		}
		 for(int i = 0; i<= Alunos.size(); i++){
				nota1 = Integer.parseInt(JOptionPane.showInputMessage(null, "Informe a nota do aluno " + Alunos[i]));  // dá erro nesse "Aluno[i]"
				Nota1[i] = nota1; // erro em Nota1[i]
			}
		 Collections.sort(Alunos);  
		 for(int ii = 0; ii<= Alunos.size(); ii++){
				JOptionPane.showMessageDialog(null, "Aluno " + Alunos[ii] + " tem a nota " + Nota1[ii]); // erro em "Alunos[ii] e Nota1[i]	
			}
		 
		
		 

  }
}

Mudei algumas coisas e acho que resolveu alguns problemas, mas depois de pedir o nome e anota ele sai do programa sem informar “fulando tem a nota x”.
Se alguém identificar o que está ocorrendo…

import java.util.*;
import javax.swing.*;
public class Alunos {
	public static void main (String[] args) {

		ArrayList Alunos = new ArrayList();
		ArrayList Nota1 = new ArrayList();
		ArrayList Nota2 = new ArrayList();
		
		String nome;
		int nota1;
		
		
		 for( ; ; ) {

		  nome = JOptionPane.showInputDialog(null, "Informe o nome do aluno ou aperte <Enter> com o campo em branco para encerrar o programa: ");
		  if(nome.equals("")){ 
		    break; 
		  }
		  Alunos.add(nome);
		  Collections.sort(Alunos); 
		}
		 for(int i = 0; i<= Alunos.size(); i++){
				nota1 = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe a nota do aluno " + Alunos.get(i)));
				Nota1.add(nota1);
			}
		  
		 for(int ii = 0; ii<= Alunos.size(); ii++){
				JOptionPane.showMessageDialog(null, "Aluno " + Alunos.get(ii) + " tem a nota " + Nota1.get(ii));	
			}
		 
		
		 

  }
}