Не уверен, где моя логическая ошибка для проверки пароля - PullRequest
0 голосов
/ 08 ноября 2019

Так что для моего домашнего задания нам нужно создать проверку пароля, которую пользователь может использовать для входа в программу, и указать, используют ли они действительные или недействительные учетные данные.

Поэтому я попытался сравнитьэто все мои варианты паролей и даже пытался сравнить его с точной строкой, которая является паролем в файле, но он все еще не работает, и я не могу найти, где моя логика не работает внутри него.

Моя программа аутентификации, в которой пользователь вводит свое имя пользователя и пароль .:

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

class Authenticator extends JPanel{
//Windows Components
private JFrame window = new JFrame("Login");
private JLabel lblUser = new JLabel("Username:");
private JLabel lblPass = new JLabel("Password:");
private JLabel lblCorrect = new JLabel("Correct Login Credentials");
private JLabel lblWrong = new JLabel("Incorrect Login Credentials");
private JTextField txtUser = new JTextField();
private JPasswordField txtPass= new JPasswordField();
private JButton btnLogin = new JButton("Login");

//TODO:  Create an instance of the PasswordChecker
private PasswordChecker check = new PasswordChecker();

//Constructor: Sets up the window
public Authenticator(){
  //Absolute layout requires null
  setLayout(null);  

  //Sets x, y, w, h of each component 
  lblUser.setBounds(10, 10, 200, 30);
  lblPass.setBounds(10, 50, 200, 30);
  txtPass.setBounds(120, 50, 200, 30);
  txtUser.setBounds(120, 10, 200, 30);
  lblCorrect.setBounds(10, 100, 200, 30);
  lblWrong.setBounds(10, 100, 200, 30);
  btnLogin.setBounds(220, 100, 100, 30);


  //add components to panel
  add(lblUser);
  add(lblPass);
  add(txtUser);
  add(txtPass);
  add(lblCorrect);
  add(lblWrong);
  add(btnLogin);

  lblCorrect.setVisible(false);
  lblWrong.setVisible(false);

  //Adds panel to window
  window.add(this);
  //Closes the program when window closes
  window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  window.setSize(400, 250);
  window.setVisible(true);

  btnLogin.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent ae){
        String userName = txtUser.getText();
        String passWord = txtUser.getText();
        if(check.checkLogin(userName, passWord)){  
           lblCorrect.setVisible(true);    
        }//end if
        else{
           lblWrong.setVisible(true);
        }//end else




       }
  }); 

}//Ends constructor

public static void main(String args[]){
  new Authenticator();
}
}

Это моя программа проверки паролей, которая проверяет ввод пользователя и должна сравнивать вводимые пользователем данные с аутентификатором:

import java.util.*;
import java.io.*;

class PasswordChecker{
private ArrayList<String> user = new ArrayList<>();
private ArrayList<String> pass = new ArrayList<>();


//Constructor: load the lists with the stuff from the file
public PasswordChecker(){

  String filename = "Logins.txt";
  Scanner fileIn;

  try{
     fileIn = new Scanner(new FileReader(filename));
     while(fileIn.hasNext()){
        user.add( fileIn.next() );
        pass.add( fileIn.next() );
     }
     fileIn.close();
  }
  catch(Exception e){
     System.out.println(e.getMessage());
  }//ends catch
}//ends constructor

//GetPassword
public String getPassword(String userName){
  for(int i = 0; i < user.size(); i++){
     if(user.get(i).equals(userName)){
        String password = pass.get(i);
        return password;
     }//end if
  }//end for
  return userName;
 }//end getPassword



 //Check Login
 public boolean checkLogin(String userName, String password){

  for(String s: user){
     String uName = s;
     String pWord = getPassword(s);

        if(pWord == password){
           return true;
        }//end if




  }//end while
  return false;
 }//end checkLogin


}//ends Class

Я ожидаю, что моя программа проверки паролей отправит истинное или ложное утверждение о том, что мой аутентификатор должен ввести, имеют ли они правильные данные.

В моем файле Logins.txt мои имена пользователей и пароли аналогичныэто. Имя пользователя PassWord 123 123

1 Ответ

0 голосов
/ 08 ноября 2019

В Java сравнение строк выполняется с помощью метода String.equals.
В строке if(pWord == password) вы использовали оператор равенства ==, который проверяет, только если две ссылки указывают на один и тот же объект.
Iизменит if(pWord == password) на if(pWord.equals(password)).
ПРИМЕЧАНИЕ
Java использует систему кэширования для строк, поэтому иногда использование == может привести к значению true, но это не всегда так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...