оператор else по-прежнему выполняется, даже если иное, если пройдены условия - PullRequest
0 голосов
/ 02 июня 2018

У меня проблемы с получением правильной работы оператора if else, здесь у меня есть форма входа в систему, которая использует значения из базы данных.Оператор для роли Employee работает нормально, но даже если оператор else if проходит, оператор else все еще выполняется.

Если это помогает, диалоговое окно появляется дважды, если оператор Customer проходит, и три раза, если else выполняется само по себе.Я извиняюсь, если мой формат кода выключен, я новичок в размещении кода здесь.

 private void jBtnLoginActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // action performed when the login button is pressed
    // variables that will contain the row entries to the login data base (user name)
    String userNameDb = "";            
    roleDb = rs.getString("role");
    //database connection code
    try
    {      
   Class.forName("org.sqlite.JDBC");
   con = DriverManager.getConnection("//database directory");       
   st=con.createStatement();
   //selects entries from the userName password and role row from the user table
   rs=st.executeQuery("Select userName, role From tblUser ;");        

   //loops through the table entires
    while(rs.next())
    {    
        //assigns database entry to variables        
        userNameDb = rs.getString("userName");
        roleDb = rs.getString("role");

    if (jTxtUserName.getText().equals(userNameDb) && roleDb.equals("Customer"))             
    {
        //switch forms
        break;
    }
    //if the users input and role match the data base for an customer send them to the selection form
    else if (jTxtUserName.getText().equals(userNameDb) && roleDb.equals("Customer")) 
    {
       //switch forms           
       break;
    }
    else
    {
        JOptionPane.showMessageDialog(null, "Login failed");

    }
        }
    }
        catch(Exception ex)
    {
        System.out.println("" + ex); 
    }          
  }
} 

1 Ответ

0 голосов
/ 02 июня 2018

Проблема в том, что ваш цикл while закодирован неверно, так как ваш блок «Ошибка входа» JOptionPane else не должен находиться в цикле while.Вместо этого объявите логическое значение перед циклом, установите его в false, проверьте, найдены ли имя пользователя / пароль в этом цикле, и, если так, установите логическое значение в true.Затем после цикл проверяет логическое значение и, если false, показывает сообщение об ошибке.

Чтобы понять почему, используйте отладчик для запуска кода, чтобы понять, почему он ведет себя так, как он себя ведет.Что еще более важно, изучите технику отладки «резиновой утки», когда вы мысленно или на бумаге просматриваете свой код, рассказывая утке, что должна делать каждая строка кода.

Чтобы проиллюстрировать, ваш код ведет себя примерно так:код ниже, где логический массив имитирует проверку вашего пароляКонечно, вы будете использовать цикл while, а не цикл for, но здесь он был использован для упрощения примера:

private someActionPerformedMethod() {
    // boolean representing when the username/password test is OK
    boolean[] loopItems = { false, false, false, true, false };
    for (boolean loopItem : loopItems) {
        if (loopItem) {
            break;
        } else {
            JOptionPane.showMessageDialog(null, "Login failed");
        }
    }
}

Предположим, что пароль / имя пользователя совпадает только с 4-й попытки (четвертый элемент - true), затем для каждой неудачной проверки JOptionPane будет отображать неудачный вход в систему.Вместо этого вы хотите что-то вроде:

private someActionPerformedMethod() {
    // boolean representing when the username/password test is OK
    boolean[] loopItems = { false, false, false, true, false };
    boolean userFound = false;

    // you'll of course be using a while loop here
    for (boolean loopItem : loopItems) {
        if (loopItem) {
            userFound = true;
            // do something with user data
            break;              
        }
    }
    if (!userFound) {
        JOptionPane.showMessageDialog(null, "Login failed");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...