2016-05-07 3 views
-4

это моя первая тема, я pt-br, поэтому заранее извинюсь за свой английский.Кодовый блок «if else» возвращает предложение «else», даже не нужно

Вот мой вопрос, у меня есть этот код, я набираю id для поиска в ArrayList, если есть равные, если положительный, он выводит на экран зарегистрированный элемент, если он отрицательный, он переходит к другому.

Но в этом коде он будет на другом, даже если есть зарегистрированный элемент. Он показывает зарегистрированный элемент, а затем выполняется блок-код else.

Я не знаю, что происходит, для меня это правильно.

//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"); 
    } 
}     
+0

честно, если objProduto.getId() == opcao fail - это просто причина, по которой они разные! – granmirupa

ответ

1

Проблема заключается в том, что вы продолжаете поиски до конца списка. Таким образом, даже если вы нашли соответствующий элемент, следующие элементы могут отличаться от того, который вы ищете, и, следовательно, else будет правдой. Что вам нужно сделать, это отобразить «не найден» сообщение только, если соответствующий элемент не был найден: Используйте логический флаг найден, как это:

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"); 
} 
+0

Очень полезно спасибо, он работал вот так. – KaioMartins

-2

Я не уверен, что происходит неправильно в вашем коде (это может быть, что одна из .get функций изменения objProduto в скрытой форме).

В любом случае, это может решить вашу проблему, и это логично же:

//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 { 
         JOptionPane.showMessageDialog(null, "Produto não encontrado"); 
        } 
       } 
+2

Да, это было избыточным 'else if', но как« может »это решить их проблему? – ChiefTwoPencils

+1

все равно то же самое, и спасибо за ответ – KaioMartins

+0

@ChiefTwoPencils «Да, это было лишнее, если бы, но как« может »это решить их проблему?» Я включил ответ на это в свой пост. «t может быть, что одна из функций .get изменяет objProduto скрытым образом». Используйте свои навыки чтения. – JoshuaD

0

Удалить последний еще и заменить его statemwnt по умолчанию которые вы хотите отобразить, если все параметры не работают. В конце вашего else, если вы поместите JOptionPane.showMessage ....., чтобы показать свое сообщение по умолчанию.