2015-12-26 4 views
0

Я начал изучать Java недавно, поэтому решил создать простую регистрационную форму.Сравнение значения JTextField с несколькими массивами

private JTextField username; 
private JPasswordField password; 
private JButton check; 
private JButton addToDb; 
ArrayList<String> dbUser = new ArrayList<String>(); 
ArrayList<String> dbPassword = new ArrayList<String>(); 

public trial(){ 
    super("Title"); 
    setLayout(new FlowLayout()); 

    username = new JTextField("",10); 
    password = new JPasswordField("",10); 
    check = new JButton("Login"); 
    addToDb = new JButton("Sign Up"); 
    add(username); 
    add(password); 
    add(check); 
    add(addToDb); 

    addToDb.addActionListener(
      new ActionListener(){ 
       public void actionPerformed(ActionEvent event){ 
        if(!username.getText().isEmpty() 
         && !password.getText().isEmpty()){ 

         dbUser.add(username.getText()); 
         dbPassword.add(password.getText()); 
         username.setText(""); 
         password.setText(""); 
         System.out.println(dbUser + "/" + dbPassword); 

        }else{ 

         System.out.println("Please fill the fields and try again!"); 
        } 
       } 
      }    
    ); 

    check.addActionListener(
      new ActionListener(){ 
       public void actionPerformed(ActionEvent event){ 

        for(int i=0; i<dbUser.size();i++){ 

         if(username.getText() == dbUser.get(i) && password.getText()== dbPassword.get(i)){ 
          JOptionPane.showMessageDialog(null, "Access Granted!"); 
         }else{ 
          JOptionPane.showMessageDialog(null, "Access Denied!"); 
         }      
        break;       
        } 
       } 
      } 
    );      
    } 
} 

Как вы можете видеть, я сделал два текстовых поля (имя пользователя и пароль), две кнопки, один, который хранит значения в двух разных ArrayLists (я попытался с HashMap, но это не сработало). И тот, который сравнивает значения в массивах со значениями в текстовых полях. Проблема в том, что когда я использую кнопку входа в систему, она всегда говорит, что доступ запрещен. Любые идеи, как это исправить?

+0

Не сравнивайте строки с помощью '==' или '='. Используйте вместо этого метод 'equals (...)' или 'equalsIgnoreCase (...)'. Поймите, что '==' проверяет, соответствуют ли две ссылки на объекты *, которые вас не интересуют. Методы, с другой стороны, проверяют, имеют ли две строки одни и те же символы в одном порядке, и это то, что дело здесь. Поэтому вместо 'if (fu ==" bar ") {' do 'if (" bar ".equals (fu)) {' или 'if (" bar ".equalsIgnoreCase (fu)) {' –

+0

Кроме того, ваш компилятор должен жаловаться, когда вы пытаетесь вызвать 'getText()' в поле JPassword, - слушайте эту жалобу и в интересах безопасности кода и безопасного кодирования не вызывайте этот метод. Вместо этого работайте с массивом char, который возвращается 'getPassword()'. –

+0

@Hovercraft Full Of Eels Чтобы отметить этот вопрос как дубликат, мне кажется странным: конечно, это сводится к сравнению строк с equals() вместо ==, но автор вопроса не знал об этом факте, так как он/она изучает Java. Мне кажется, что он отстает от меня, потому что, если бы автор знал об этом факте, он бы не допустил этой ошибки. ? – morpheus05

ответ

0

В Java String s сравнивается с equals и не == , Причина в том, что строки - это объекты, а не примитивы. См What is the difference between == vs equals() in Java? для получения дополнительной информации о == и equals()

Поэтому выражение if неправильно:

username.getText().equals(dbUser.get(i)) && password.getText().equals(dbPassword.get(i)) 
0

Если вы хотите сравнить использование Струны равно метод, == сравнит Адрес

Меняет

if(username.getText() == dbUser.get(i) && password.getText()== dbPassword.get(i)) 

в

if(username.getText().equals(dbUser.get(i)) && password.getText().equals(dbPassword.get(i))) 
+1

У Java нет адресов, они называются 'reference'. '==' сравнивает контрольный удержание объекта. – YoungHobbit

+0

Я согласен с @YoungHobbit. И независимо от того, вопрос такой распространенный, и его спрашивали и так много раз отвечали, что он не должен был даже отвечать, а был закрыт как дубликат, что-то я сделал, но только после того, как 2 ответа проскользнули. –

+0

Извините, я думал, что проблема связана с моими арифметистами, а не с моими операторами. Причина в том, что я пробовал несколько разных методов для создания моего заявления if if без успеха. Похоже, я не пробовал самое очевидное. – Adri

Смежные вопросы