Problema com operador de comparação [RESOLVIDO]

5 respostas
N

Bom dia a todos, sou novo no mundo java e no forum. Estou com uma dúvida.

O código é o seguinte:

import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Lista{
	public static void main(String[] args){
		ArrayList<String> lista = new ArrayList<String>();
		String name;
				
		do{
			name=JOptionPane.showInputDialog("Digite um nome");
			if(name!="sair"){
				lista.add(name);
				System.out.println(lista);			
				}			
		}while(name!="sair");
       }
}

Eu esperava que o programa fosse encerrado ao digitar “sair”,
mas isso não acontece.
O que ocorre?

5 Respostas

drsmachado

== e != são operadores de comparação para tipos primitivos.
Como toda String é um objeto da classe String, isso implica que nenhuma String é primitivo.
Assim sendo, você não pode comparar Strings fazendo isso

name!="sair"

Você precisa usar o método equals…

TerraSkilll

Sua pergunta não tem nada a ver com ArrayList, não entendi por que colocou no título da pergunta.

Strings devem ser comparadas utilizando-se equals(). No seu código, ficaria:
import java.util.ArrayList;  
import javax.swing.JOptionPane;  
      
public class Lista{  
  public static void main(String[] args){  
     ArrayList<String> lista = new ArrayList<String>();  
     String name;  
                      
     do{  
       name=JOptionPane.showInputDialog("Digite um nome");  
       if(!name.equals("sair")){  
          lista.add(name);
          System.out.println(lista);
       }             
      }while(!name.equals("sair"));  
    }
}
Note que, se for digitado algo diferente de sair (tudo em minúsculo), a comparação falhará. Por isso, recomendo optar pelo equalsIgnoreCase(), que compara ignorando se as letras são maiúsculas ou minúsculas ("Sair" é igual a "saIR", e assim por diante):
do{  
       name=JOptionPane.showInputDialog("Digite um nome");  
       if(!name.equalsIgnoreCase("sair")){  
          lista.add(name);
          System.out.println(lista);
       }             
      }while(!name.equalsIgnoreCase("sair"));  
    }

Abraço.

regis_hideki

TerraSkilll:
Outra coisa, a linha:System.out.println(lista); Provavelmente não faz o que você espera que ela faça. (imprimir a lista).

Faz sim. Não faria se fosse com Array.

TerraSkilll

regis_hideki:
TerraSkilll:
Outra coisa, a linha:System.out.println(lista); Provavelmente não faz o que você espera que ela faça. (imprimir a lista).

Faz sim. Não faria se fosse com Array.

Opz, erro meu. :frowning: Acho que tomei muito sol ontem… Valeu, vou editar.

Abraços.

N

Você tem razão, eu ja modifiquei o titulo.

Valeu pessoal, minha dúvida foi resolvida.

Criado 29 de novembro de 2013
Ultima resposta 29 de nov. de 2013
Respostas 5
Participantes 4