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
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}
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.
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…
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…
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.
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));
}
}
}