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:
importjavax.swing.JOptionPane;importjava.util.Random;publicclassExercicio0902{publicstaticvoidmain(String[]args){Randomrdm=newRandom();Stringnome[]=newString[5];for(inti=1;i<6;i++){Stringstr="Nome da "+i+"ª pessoa";Stringaux=JOptionPane.showInputDialog(str);aux=aux.trim();if(aux==null||aux=="")break;nome[i-1]=aux;}Stringsorteio=nome[rdm.nextInt(5)];Stringstr="Pessoal sorteada: "+sorteio;JOptionPane.showMessageDialog(null,str);}}
Mas resumidamente, comparação de objetos (no seu caso do tipo String) é assim:
if(aux.equals(""))...
Aí no seu código ficaria:
if(aux.equals(""))break;
Valeu!
rnldfll
Ficaria assim (eu acho, não sei se o que eu entendi é o que vc deseja):
rotulo:for(inti=1;i<6;i++){Stringstr="Nome da "+i+"ª pessoa";Stringaux=JOptionPane.showInputDialog(str);aux=aux.trim();if(aux==null||aux==""){breakrotulo;}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);
ViniGodoy
Se é um laço só, não precisa do rótulo. É só colocar break e pronto.
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().
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?
Obrigado!
ViniGodoy
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.