2016-08-19 6 views
0

Итак, я пытаюсь получить Java-апплет, чтобы принять набор из нескольких паролей, поэтому, естественно, я решил разместить их в массиве. Однако работает только один из паролей в массиве, последний в наборе. Ни один из них не будет работать, и мой апплет отрицает других. Это мой код:Как бы я запрограммировал массив строк для работы в виде набора паролей?

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class JPasswordC extends JApplet implements ActionListener 
{ 
private final String[] password = {"Rosebud", "Redrum", "Jason", "Surrender", "Dorothy"}; 

private Container con = getContentPane(); 
private JLabel passwordLabel = new JLabel("Password: "); 
private JTextField passwordField = new JTextField(16); 

private JLabel grantedPrompt = new JLabel("<html><font color=\"green\">Access Granted</font></html>"); 
private JLabel deniedPrompt = new JLabel("<html><font color=\"red\">Access Denied</font></html>"); 

public void init() 
{ 
    con.setLayout(new FlowLayout()); 

    con.add(passwordLabel); 
    con.add(passwordField); 
    con.add(grantedPrompt); 
    grantedPrompt.setVisible(false); 
    con.add(deniedPrompt); 
    deniedPrompt.setVisible(false); 

    passwordField.addActionListener(this); 
} 

public void actionPerformed(ActionEvent ae) 
{ 
    String input = passwordField.getText(); 

    for(String p : password) 
    { 

     if(input.equalsIgnoreCase(p)) 
     { 
      grantedPrompt.setVisible(true); 
      deniedPrompt.setVisible(false); 
     } 
     else 
     { 
      grantedPrompt.setVisible(false); 
      deniedPrompt.setVisible(true); 
     } 
    } 
} 
} 

Как я могу заставить это работать правильно? Я что-то делаю с массивом? Это что-то в коде вообще?

ответ

0

Код проверяет каждый пароль, даже если найден его действительный, что означает, что даже если действительный пароль будет найден, он будет по-прежнему изменяться в зависимости от срока действия следующего пароля. Таким образом, последний в массиве объявляет статус grantedPrompt и deniedPrompt. Попробуйте добавить break после ввода одного пароля.

for(String p : password) 
{ 

    if(input.equalsIgnoreCase(p)) 
    { 
     grantedPrompt.setVisible(true); 
     deniedPrompt.setVisible(false); 
     break; // break out or loop once found 
    } 
    else 
    { 
     grantedPrompt.setVisible(false); 
     deniedPrompt.setVisible(true); 
    } 
} 
0

Вы перекручивание через все пароли, даже если есть match.So изменить код, чтобы вернуть метод, когда-либо есть совпадение в пароле.

public void actionPerformed(ActionEvent ae) 
    { 
     String input = passwordField.getText(); 

     for(String p : password) 
     { 

      if(input.equalsIgnoreCase(p)) 
      { 
       grantedPrompt.setVisible(true); 
       deniedPrompt.setVisible(false); 
       return; 
      } 

     } 
     grantedPrompt.setVisible(false); 
     deniedPrompt.setVisible(true); 

    }