KaioMartins KaioMartins - 7 months ago 11
Java Question

A 'if else' code block returns the 'else' sentence even doesn't need

this is my first topic, i'm pt-br, so beforehand i will apologize for my english.

Here's my question, i have this code, i type the id to look in the ArrayList if there are equals, if positive, it brings to the screen the registered item, if negative, it goes to the else.

But in this code, it's going to the else even when there are a registered item. It shows the registered item and then the else block code is executed.

I don't know what's going on, for me it's correct.

//abre a opção para o usuário digitar o id para a busca
int opcao = Integer.parseInt(JOptionPane.showInputDialog("Digite o ID para a busca"));
//'for' para percorrer o vetor
for (Produto objProduto : vetorProdutos2) {
//if para verificar se o ID digitado para busca contém no vetor
if (objProduto.getId() == opcao) {
JOptionPane.showMessageDialog(null,
"\nID: " + objProduto.getId() + "\nDescrição: " + objProduto.getDescricao()
+ "\nEstoque: " + objProduto.getEstoque() + "\nPreço: "
+ objProduto.getPreço() + "\nStatus: " + objProduto.getStatus());
} else if (objProduto.getId() != opcao) {
JOptionPane.showMessageDialog(null, "Produto não encontrado");
}
}

Answer

The problem is that you keep searching until the end of the list. So, even if you found a matching item, the next elements may be different from the one you seek, and therefore the else would be true. What you need to do, is display the "not found" message only if no matching element was found: Use a boolean flag found like this:

    int opcao = Integer.parseInt(JOptionPane.showInputDialog("Digite o ID para a busca"));
        boolean found = false;

        //'for' para percorrer o vetor
        for (Produto objProduto : vetorProdutos2) {
         //if para verificar se o ID digitado para busca contém no vetor
         if (objProduto.getId() == opcao) {
                     JOptionPane.showMessageDialog(null,
      "\nID: " + objProduto.getId()+"\nDescrição: " + objProduto.getDescricao()
                                                    + "\nEstoque: " + objProduto.getEstoque() + "\nPreço: "
                                                    + objProduto.getPreço() + "\nStatus: " + objProduto.getStatus());
                   found = true;
               } 
         }
 if (! found)
 {
  JOptionPane.showMessageDialog(null, "Produto não encontrado");
}