Olá pessoal. Sou novo aqui no fórum e esse é meu primeiro post. Espero não estar descumprindo nenhuma regra e se estiver, me desculpem, digam qual e a corrigirei. Sou novo no universo da programação, esse é meu primeiro semestre.
Preciso desenvolver um algoritmo que receba o nome de 10 pessoas e verifique se o nome Fernanda está entre eles. Já fiz a parte dos nomes, mas não faço a menor ideia de como verificar se o nome está na lista usando o JOptionPane. Alguém poderia me ajudar?
public static void main(String[]args) {
String[] nomes = new String [10];
int indice = 0;
while (indice < 10) {
nomes [indice] = JOptionPane.showInputDialog("Digite o nome de 10 cidades.\n" + "Cidade " + (indice + 1) + " de 10: ");
if (nomes[indice].length()>15) {
JOptionPane.showMessageDialog(null, "Só são permitidas 15 letras.", "Atenção!", 0 );
}else {
indice++;
}
}
Arrays.sort(nomes);
for (int i=0; i< nomes.length; i++) {
System.out.println((i+1) + "ª Nome: " + nomes[i]);
String resposta = JOptionPane.showInputDialog("Clique em OK quantas vezes quiser para consultar os nomes salvos: ");
}
}
Olá, boa tarde! Seja bem vindo!
Para verificar se uma String tem o mesmo conteúdo que outra, você deve usar o método equals, ou seja, umaString.equals( outraString ). Esse método retornará verdadeiro caso as duas tenham o mesmo conteúdo (diferenciando letras maiúsculas de minúsculas) ou falso caso contrário.
Para o seu caso, basta percorrer o array de nomes e verificar posição por posição.
for ( int i = 0; i < nomes.length; i++ ) {
if ( nomes[i].equals( "Fernanda" ) ) {
JOptionPane.showMessageDialog( "O nome Fernanda foi encontrado na posição " + i );
}
}
Uma outra forma de fazer isso seria usando o "for melhorado":
for ( String nome : nomes ) {
if ( nome.equals( "Fernanda" ) ) {
System.out.println( "Nome Fernanda encontrado..." );
}
}
Esse for serve para percorrer estruturas iteráveis como os arrays. Para fazer um paralelo com o for tradicional, o código acima seria escrito assim:
for ( int i = 0; i < nomes.length; i++ ) {
String nome = nomes[i];
if ( nome.equals( "Fernanda" ) ) {
System.out.println( "Nome Fernanda encontrado..." );
}
}
Ou seja, a cada elemento visitado, nome recebe o valor desse elemento e pode então ser usado.
Várias coisas podem ser observadas no seu código, mas a que me mais me saltou aos olhos é o uso de um valor numérico na posição de uma constante na invocação de showMessageDialog. Não sei quem te ensinou isso, pq apesar de funcionar, à rigor, está errado. O correto é usar o valor expresso em uma das constantes contidas na classe JOptionPane para indicar o tipo de diálogo de mensagem. O que eu quero dizer é que isso:
JOptionPane.showMessageDialog(null, "Só são permitidas 15 letras.", "Atenção!", 0 );
Deveria ser isso:
JOptionPane.showMessageDialog(null, "Só são permitidas 15 letras.", "Atenção!", JOptionPane.ERROR_MESSAGE );
Sendo que as constantes que devem ser usadas como argumento no quarto parâmetro do método são:
JOptionPane.ERROR_MESSAGE
JOptionPane.INFORMATION_MESSAGE
JOptionPane.WARNING_MESSAGE
JOptionPane.QUESTION_MESSAGE
JOptionPane.PLAIN_MESSAGE
Caso não tenha entendido a utilidade do uso de cada constante é que imagine, você não tem garantia ALGUMA que 0 indica uma mensagem de erro. Pode ser que em outra implementação do Swing a mensagem de erro seja talvez o valor -10 ou qualquer outro inteiro. Quando fixamos o uso nas constantes definidas nas APIs, temos certeza que, independente da implementação, o comportamento do componente será condizente com o que é fornecido programaticamente.
A definição dessas constantes no código fonte da classe JOptionPane vc pode ver no link a seguir, entre as linhas 368 e 376.