condição no "IF" não está funcionando

7 respostas
S

Olá pessoal,

Alguém sabe me dizer o porquê da condição do meu “if” destacada na figura abaixo não está funcionando ?

No exemplo da figura, entrei com o valor “a” para a variável nomeProduto e comparei com o valor de retorno da lista (list.get(b).pegarNome() ) que no caso foi “a”. O problema é que essa droga não entra na condição verdadeira se nomeProduto for igual a …PegarNome(), e juro que não sei porque …

Notem que no resultado, ambos tem o memso valor, mas essa droga não entra no IF se a expressão for verdadeira :frowning:

public static void execute() {

List<EstoqueProfile> list = new ArrayList<EstoqueProfile>();
    Scanner entrada = new Scanner (System.in);
    String nomeProduto;
    int codigo;
    int quantidade;
    
    String check = "diferente";
    char sair = 'a';
    int counter = 0;

    for (int i = 0; sair != 's'; i++ ){
        
        System.out.println ("Digite o nome do produto: ");
        nomeProduto = entrada.next();
        
        System.out.println ("Digite o código do produto: ");
        codigo = entrada.nextInt();
        
        System.out.println ("Digite a quantidade do produto: ");
        quantidade = entrada.nextInt();
   
        if ( counter != 0 ){

            for ( int b = 0; b < list.size(); b++ ){
                System.out.println ("nomeProduto: " + nomeProduto + " lista: " + list.get(b).pegarNome());
                
               [size=18][b] if (nomeProduto == list.get(b).pegarNome()){[/b][/size]
                    System.out.println ("Esse produto já existe, adicione um novo produto");
                    check = "igual";
                    break;
                } else {
                    check = "diferente";   
                }
            }
            System.out.println ("igual ou diferente: " + check);
            if ( check == "diferente"){
                list.add(new EstoqueProfile (nomeProduto, codigo, quantidade));
            }
             
       } else {
            list.add(new EstoqueProfile (nomeProduto, codigo, quantidade));
            System.out.println ("entrou1: nome " + list.get(counter).nomeProduto + " Contador: " + counter);
            System.out.println ("tamanho: " + list.size());
            counter = 1;
       }

        System.out.println("Deseja sair ? (S/N): ");
        sair = entrada.next().charAt(0);       
    }
    
    printList(list);
}
public class EstoqueProfile {

String nomeProduto;

int codigo;

int quantidade;
EstoqueProfile(String name, int code, int amount) {
    this.nomeProduto = name;
    this.codigo = code;
    this.quantidade = amount;
//    throw new UnsupportedOperationException("Not yet implemented");
}

public String pegarNome (){
    return this.nomeProduto;

Obs.: esse igual e diferente escrito errado já foi corrigido :slight_smile:

Se alguém puder me ajudar, ficarei muito grato !!!

Obrigado !!


7 Respostas

L

tenta

nomeProduto.equals(list.get(b).pegarNome())

Adriano_Almeida

Em java, comparacao de Strings se faz com o método equals que existe na classe String.

Entao, aquele seu if ficaria assim:

if (nomeProduto.equals(list.get(b).pegarNome()))
R

Para comparar String você deve usar o método equals.

if (nomeProduto.equals( list.get(b).pegarNome() )) {
  //agora sim !
}

O “==” no objeto String, verifica posição de memoria.

[]s
Roger Leite

Rapapel

Como o pessoal disse compare Strings com equals. Mas Strings que estão no “cache” podem ser comparadas com ==(que como dito compara se a referência esta apontando para o mesmo objeto). Não que isso seja correto. Mas é possivel.
Isso porque a JVM cria um uma especie de cache de Strings.

public static void main(String[] args) {
		String t1 = "teste";
		String t2 = "teste";
		System.out.println(t1==t2);
	}

Nesse caso a String t2 será uma referência para t1.
Mas use equals mesmo.

Vinicius_Sartori

Montar estas referencias da muito trabalho, se já tem o equals que facilita pronto, pra que complicar?

S

sensacional pessoal …

mataram minha dúvida …

rapapel … agora entendi o porquê que não estava funfando … valeww

LPJava

Sabugada:
sensacional pessoal …

mataram minha dúvida …

rapapel … agora entendi o porquê que não estava funfando … valeww

so mais um detalhe… veja isso

flw!

Criado 20 de julho de 2008
Ultima resposta 21 de jul. de 2008
Respostas 7
Participantes 7