Ajuda (String = null) não encerra

8 respostas
A

Bom dia pessoal,

Primeiramente sou novo no forum :slight_smile:

Comecei a estudar Java por conta própria e estou lendo o Livro Programação de computadores em Java(Rui Rossi)

Estou com um problema na seguinte situação:

Preciso criar um programa que pede nome de 3 a 50 caracteres e email de 3 a 50 caracteres, porém se o diálogo de entrada for cancelado o aplicativo deve ser encerrado imediatamente.

Segue o código

import javax.swing.JOptionPane;

public class Exercicio0705 {

public static void main(String[] args) {
	
	String nome = "";
	String email = "";
	String aux = "";
	
	aux = "Informe seu nome:";
	nome = JOptionPane.showInputDialog(aux);
	
	if (nome == null){
		aux = "Você precisa digitar um nome!";
		JOptionPane.showMessageDialog(null, aux,"Erro",0);
		System.exit(0);
	}
							
	if ( nome.length()<= 6 || nome.length() >= 51) {
		aux = "Este campo deve ter de 5 a 50 caracteres";
		JOptionPane.showMessageDialog(null, aux,"Erro",0);
		System.exit(0);
	}
				
	aux = "Informe seu e-mail:";
	email = JOptionPane.showInputDialog(null,aux);
	
	if (email == null){
		System.exit(0);
	}
	
	if (email.length()<= 4 || email.length() >=51){
		aux = "O email deve ter de 3 a 50 caracteres";
		JOptionPane.showMessageDialog(null, aux,"Erro",0);
		System.exit(0);
	}
	
	aux = "Cadastro gravado: \nNome: " + nome + "\nE-mail: " + email;
	JOptionPane.showMessageDialog(null, aux,"Mensagem",1);
	System.exit(0);
	
	}
}

OBS: quando eu não digito nada ele aparece a mensagem da segunda condição “deve ter de 5 a 50 caracteres”, e eu preciso que o programa encerre, podem me ajudar?

8 Respostas

paulohms

Artur,

Para comparação de string utilize o método equals(), troque as linhas por:

nome.equals("");
orlandocn

troque o

if (nome == null)

por

if (nome == null || "".equals(nome.trim()))
S

paulohms:
Artur,

Para comparação de string utilize o método equals(), troque as linhas por:

nome.equals("");

Sempre que for comparar um objeto constante com uma variavel (de objeto também) usando o equals, sempre invoque o equals da constante para evitar um possivel NullPointerException.

chibana

Bom dia Artur.
Primeiramente, gostaria de ressaltar que quando for escrever um código aqui no forum o coloque entre as tags [.code][\code.] (sem os pontos), pois assim ele faz a correta utilização.
Dê uma olhada no código que eu "Refiz", mas pode mudar o que vc quiser.

public static void main(String[] args) {

        String nome = "";
        String email = "";
        String aux = "";

        aux = "Informe seu nome:";
        nome = JOptionPane.showInputDialog(aux);

        
        if (!(nome == null || nome.trim().equals(""))) {
            if (nome.length() < 5 || nome.length() > 50) {
                aux = "Este campo deve ter de 5 a 50 caracteres";
                JOptionPane.showMessageDialog(null, aux, "Erro", 0);
                System.exit(0);
            }
        }else{
            aux = "Você precisa digitar um nome!";
            JOptionPane.showMessageDialog(null, aux, "Erro", 0);
            System.exit(0);
        }

        aux = "Informe seu e-mail:";
        email = JOptionPane.showInputDialog(null, aux);

        if (!(email == null || email.trim().equals(""))) {
            if (email.length() < 3 || email.length() > 50) {
                aux = "O email deve ter de 3 a 50 caracteres";
                JOptionPane.showMessageDialog(null, aux, "Erro", 0);
                System.exit(0);
            }
        }else{
            aux = "Você precisa digitar um e-mail!";
            JOptionPane.showMessageDialog(null, aux, "Erro", 0);
            System.exit(0);
        }
        
        aux = "Cadastro gravado: \nNome: " + nome + "\nE-mail: " + email;
        JOptionPane.showMessageDialog(null, aux, "Mensagem", 1);
        System.exit(0);

    }

Qualquer coisa deixa msg ai. Espero te ajudado =)

A

Agradeço a atenção de todos, mas alguem pode me explicar o porque estava dando errado para eu assimilar melhor?

orlandocn

A variavel nome estava sendo inicializada na linha

String nome = "";

a sua condição era

nome == null

o que nunca ocorria pois nome continha a String “”;

chibana

O que pode ocorrer também muitas vezes quando você está capturando por exemplo um tipo numérico e a pessoa clica em cancelar, eh ocorrer esse exception: nullpointerexception null
para isso utilizamos a estrutura try and catch =) mas isso foi só um complemento.
Quando se faz apenas a comparação se a String é null, não é a mesma coisa que a string está vazia, por exemplo:

if(nome == null){
 //instrução
}

é diferente de:

if(nome.trim().equals("")){ //instrução }

lembrando que…a utilização do trim sempre deve ser feita pois senão a pessoa pode encher de espaço no campo e o sistema vai aceitar. O trim tem a função de retirar os espaços em branco.

A

Muito obrigado pessoal, perfeito a explicação do orlandocn simples e direta e foi de otimo agrado o complemento do chibana.

Eu fiz a pergunta pois não adianta roda o sistema e não entender como funciona, agora já sei a raiz do problema e entendi o funcionamento.

Criado 27 de fevereiro de 2013
Ultima resposta 27 de fev. de 2013
Respostas 8
Participantes 5