Preciso fazer um programa que armazena 5 nomes em um vetor e sorteia um deles, consegui fazer isso, porém como sou meio chato, gostaria de fazer com que se o valor for nulo ele dava um break na condição for, mas não está funcionando, podem me ajudar?
Segue o código:
import javax.swing.JOptionPane;
import java.util.Random;
public class Exercicio0902 {
public static void main(String[] args) {
Random rdm = new Random();
String nome[] = new String[5];
for (int i = 1; i < 6; i++){
String str = "Nome da " + i + "ª pessoa";
String aux = JOptionPane.showInputDialog(str);
aux = aux.trim();
if (aux == null || aux == "")break;
nome[i - 1] = aux;
}
String sorteio = nome[rdm.nextInt(5)];
String str = "Pessoal sorteada: " + sorteio;
JOptionPane.showMessageDialog(null, str);
}
}
Ficaria assim (eu acho, não sei se o que eu entendi é o que vc deseja):
rotulo:
for (int i = 1; i < 6; i++){
String str = "Nome da " + i + "ª pessoa";
String aux = JOptionPane.showInputDialog(str);
aux = aux.trim();
if (aux == null || aux == ""){
break rotulo;
}
nome[i - 1] = aux;
}
@Edit: o rotulo indica qual laço você quer que pare quando a condição for true(sou novato, me digam se alguem achar algum erro no q estou dizendo);
Pessoal, o problema ali não é o break. Mas o fato dele estar fazendo trim() no aux, quando aux pode retornar nulo.
E tentar fazer trim() num objeto nulo é NullPointerException.
Além disso, para testar se uma String é vazia, pode-se testar com length() == 0 ou equals(""). Entretanto, a melhor prática é usar o isEmpty().
O código correto seria:
[code] public static void main(String[] args) {
String nomes[] = new String[5];
int num = 0;
while (num < nomes.length) {
String nome = JOptionPane.showInputDialog("Nome da " + (num + 1) + "ª pessoa");
nome = nome == null ? "" : nome.trim();
if (nome.isEmpty()) {
break;
}
nomes[num++] = nome;
}
if (num != 0) {
String sorteio = nomes[new Random().nextInt(num)];
JOptionPane.showMessageDialog(null, "Pessoa sorteada: " + sorteio);
}
}
Verdade ViniGodoy, você tinha falado sobre o .isEmpty() na minha pergunta. Por questão de curiosidade e para aprender, por que o isEmpty é uma prática melhor que as outras?
Por que ele descreve exatamente qual é a sua intenção com aquele código.
Isso permite que quem faz a implementação de String defina a estratégia mais eficiente possível para fazer esse teste.