Member 13741457 Ответов: 1

Невозможно перейти к коду if else после ввода необходимой информации в логин


Мой оператор If else не показывает следующую часть кодов, несмотря на правильный ввод имени учетной записи и pin-кода, я не знаю, в чем проблема

JFrame king = new JFrame("Kingsmen ATM Banking");
    JPanel pnl = new JPanel(new BorderLayout(5, 5));
    JPanel acn = new JPanel(new GridLayout(0,1,2,2));
    JPanel lgn = new JPanel(new GridLayout(0, 1, 2, 2));
    
    acn.add(new JLabel("Account Name: ", SwingConstants.RIGHT));
    JTextField a = new JTextField();
    lgn.add(a);
    String acname = a.getText();
    
    acn.add(new JLabel("Pin Number: ", SwingConstants.RIGHT));
    JPasswordField p = new JPasswordField();
    lgn.add(p);
    char[] pc = p.getPassword();
    String pnu = new String(pc);
    
        pnl.add(lgn, BorderLayout.CENTER);
        pnl.add(acn, BorderLayout.WEST);
        JOptionPane.showMessageDialog(king, pnl, "Kingsmen Login Page", JOptionPane.QUESTION_MESSAGE);
 

do{
if(acname.equals (kn1) && pnu.equals(pn1) ){
//main menu program
    System.out.println("");
    System.out.println("");
    System.out.println(" W E L C O M E   A G E N T : "+act);
    System.out.println("");
    System.out.println("");
    System.out.println("K I N G S M E N    B A N K I N G");
    System.out.println("");
    System.out.println("C H O O S E    F R O M    T H E   G I V E N    O P T I O N S:");
    System.out.println("");
    System.out.println("  | 1 |  C H E C K    B A L A N C E");
    System.out.println("");
    System.out.println("  | 2 |      W I T H D R A W       ");
    System.out.println("");
    System.out.println("  | 3 |       D E P O S I T        ");
    System.out.println("");
    System.out.println("  | 4 |         E X I T            ");
    System.out.println("");
    System.out.print("P L E A S E    I N P U T    Y O U R    C H O I C E : ");
    System.out.print("");
    cho = kingsmen.next().charAt(0);
    }
else{
    System.out.println("I N V A L I D    A C C O U N T    P L E A S E    T R Y    A G A I N");
    System.out.println("");
    System.out.println(" D O   Y O U   W I S H   T O   C O N T I N U E ? ");                                                                                                   
    System.out.println("");                                                                                                                                                     
    System.out.println(" [ Y ]  Y E S    [ N ]  N O");                                                                                                                             
    System.out.println("");                                                                                                                                                      
    choice = kingsmen.next().charAt(0);
    System.out.println("");                                                                                                                                                                
    System.out.println("");
    System.out.println("");  
}


Что я уже пробовал:

я пробовал заменить kn1 на "Eggsy", а pn1 - на "1231", но безрезультатно

Richard MacCutchan

Очевидный ответ заключается в том, что одно или оба этих поля не совпадают. Используйте свой отладчик, чтобы выяснить, почему.

1 Ответов

Рейтинг:
0

Richard Deeming

Две очевидные проблемы:

  1. Вы читаете имя пользователя и пароль до вы даете пользователю возможность ввести их. Вы никогда не обновляете acname и pnu переменные.
  2. Вы показываете диалоговое окно входа в систему однажды; если сведения неверны и пользователь хочет повторить попытку, вы никогда больше не показываете ему диалоговое окно.

JFrame king = new JFrame("Kingsmen ATM Banking");
JPanel pnl = new JPanel(new BorderLayout(5, 5));
JPanel acn = new JPanel(new GridLayout(0,1,2,2));
JPanel lgn = new JPanel(new GridLayout(0, 1, 2, 2));

acn.add(new JLabel("Account Name: ", SwingConstants.RIGHT));
JTextField a = new JTextField();
lgn.add(a);

acn.add(new JLabel("Pin Number: ", SwingConstants.RIGHT));
JPasswordField p = new JPasswordField();
lgn.add(p);

pnl.add(lgn, BorderLayout.CENTER);
pnl.add(acn, BorderLayout.WEST);

String acname, pnu;
boolean loggedIn = false, terminate = false;
while (!loggedIn && !terminate) {
    JOptionPane.showMessageDialog(king, pnl, "Kingsmen Login Page", JOptionPane.QUESTION_MESSAGE);
    
    acname = a.getText();
    char[] pc = p.getPassword();
    pnu = new String(pc);
    
    if (acname.equals(kn1) && pnu.equals(pn1)) {
        loggedIn = true;
    }
    else {
        System.out.println("I N V A L I D    A C C O U N T    P L E A S E    T R Y    A G A I N");
        System.out.println("");
        System.out.println(" D O   Y O U   W I S H   T O   C O N T I N U E ? ");                                                                                                   
        System.out.println("");                                                                                                                                                     
        System.out.println(" [ Y ]  Y E S    [ N ]  N O");                                                                                                                             
        System.out.println("");                                                                                                                                                      
        
        choice = kingsmen.next().charAt(0);
        if (choice == 'N') {
            terminate = true;
        }
        // Assume anything other than "N" means "try again".
    }
}

if (loggedIn) {
    ...
}

NB: Вы должны рассмотреть возможность разбиения вашего кода на отдельные функции, чтобы сделать его более понятным.