Ajuda condição break!

10 respostas
A

Boa tarde pessoal,

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

}

Fico no aguardo.

Obrigado!

10 Respostas

W

nao seria assim?

if (aux == null || aux == “”){

nome[i - 1] = aux;

break;

};

bgomes06

Fala Artur!

Eu já tive essa dúvida, esse tópico que o pessoal me respondeu vai te esclarecer legal:

http://www.guj.com.br/java/294061-entrada-de-dados-em-txt—parar-de-solicitar-a-entrada-quando-for-inserida-uma-linha-em-branco#1560779

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 (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);

ViniGodoy

Se é um laço só, não precisa do rótulo. É só colocar break e pronto.

andrews360
acho que é isso que você queria fazer
public static void main(String[] args) {  
        
        Random rdm = new Random();  
        String nome[] = new String[5];  
          
        for (int i = 0; i &lt; 5; i++){  
            String str = &quot;Nome da &quot; + i + &quot;ª pessoa&quot;;  
            String aux = JOptionPane.showInputDialog(str);  
            aux = aux.trim();  
            if (aux == null || aux.equals(&quot;&quot;))break;  
            nome[i] = aux;  
            }  
          
        String sorteio = nome[rdm.nextInt(5)];  
        String str = &quot;Pessoal sorteada: &quot; + sorteio;  
        JOptionPane.showMessageDialog(null, str);  
          
    }
A

Obrigado pessoal.

Vou testar as opções.

vlw!

ViniGodoy

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:
public static void main(String[] args) {
        String nomes[] = new String[5];

        int num = 0;
        while (num &lt; nomes.length) {
            String nome = JOptionPane.showInputDialog(&quot;Nome da &quot; + (num + 1) + &quot;ª pessoa&quot;);
            nome = nome == null ? &quot;&quot; : nome.trim();
            if (nome.isEmpty()) {
                break;
            }
            nomes[num++] = nome;
        }

        if (num != 0) {
            String sorteio = nomes[new Random().nextInt(num)];
            JOptionPane.showMessageDialog(null, &quot;Pessoa sorteada: &quot; + sorteio);
        }
    }
bgomes06

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.

bgomes06

Muito obrigado! :thumbup:

Criado 9 de março de 2013
Ultima resposta 12 de mar. de 2013
Respostas 10
Participantes 6