Tela de login nÃo responde qual o erro?

3 respostas
A

import javax.swing.*;

public class login {

public static void main(String args[]){

   String nome;
   String senha;

    nome = JOptionPane.showInputDialog("inserir nome");
    senha = JOptionPane.showInputDialog("inserir senha");

    if (nome == ("nome"))
    if (senha ==("senha"))
    JOptionPane.showMessageDialog(null,"Logado");
    else
    JOptionPane.showMessageDialog(null,"Não Logao");

}

}

3 Respostas

rafaelbortoletto

use os métodos equals ( no caso de login pode ser a melhor opção ) ou equalsIgnoreCase quando for comparar Strings

Coloquei aqui com equalsIgnoreCase para efeitos de exemplo:

public static void main(String[] args) {
		
		String nome;
		String senha;

		nome = JOptionPane.showInputDialog("inserir nome");
		senha = JOptionPane.showInputDialog("inserir senha");

		if (nome.equalsIgnoreCase("nome")){
			
			if (senha.equalsIgnoreCase("senha"))
				JOptionPane.showMessageDialog(null,"Logado");
			else
				JOptionPane.showMessageDialog(null,"Não Logado");
		}else{
			JOptionPane.showMessageDialog(null,"Login Invalido");
		}
	}
prog.tiago

Bom dia amigo!

Já tive o seu problema.
No Java Strings não são tipos primitivos como int, char enfim… Strings são objetos que também são instanciados.
Assim:

String nome="Tiago"; e String nome=new String("Tiago"); é a mesma coisa.

Como qualquer objeto criado em java, quando eu uso o operador == estou verificando se as variáveis comparadas referenciam o mesmo objeto na memória.

Assim, quando você faz:

String nome=new String("Tiago");
if(nome=="Tiago"){

Perceba que você tem dois objetos String, os dois com o mesmo conteúdo, mas mesmo assim objetos diferentes!

Para comparar o conteúdo de objetos, utilize o método .equals.

Ficaria assim:

String nome=new String("Tiago");
if(nome.equals("Tiago")){

Abraço

prog.tiago

Olá de novo..

Só mais um detalhe

O Java implementa o que se conhece por POOL DE STRINGS.

Digamos:

public static void main(String[] args){
		
		String letra=new String("A");
		String outraLetra=new String("A");
		
		if(letra==outraLetra){
			System.out.println("igual");
		}else{
			System.out.println("diferente");
		}
		
		
	}

O código acima imprimirá "diferente" afinal as variáveis letra e outraLetra referenciam objetos String diferentes na memória. Existem de fato dois objetos diferentes criados.

Agora veja:

public static void main(String[] args){
		
		String letra="A";
		String outraLetra="A";
		
		if(letra==outraLetra){
			System.out.println("igual");
		}else{
			System.out.println("diferente");
		}
		
		
	}

O código acima imprimirá "igual" mesmo utilizando o operador ==. Pq? Porque em Strings (apenas em Strings) quando você cria um objeto sem o operador new, o Java coloca o conteúdo desse objeto num POOL e o vincula ao objeto. Quando você criar uma outra String também sem o operador new, ele procurará no pool um conteúdo igual, caso ele ache ele vincula esse mesmo objeto à nova variável de instância. Assim sendo no código acima existe apenas um objeto na memória, referenciado por duas variáveis: letra e outraLetra.

Mesmo assim, o uso do == não é recomendado para Strings. Utilize .equals para comparação de conteúdos em Strings.

Um forte abraço. :D

Criado 11 de agosto de 2010
Ultima resposta 12 de ago. de 2010
Respostas 3
Participantes 3