Так что для моего домашнего задания нам нужно создать проверку пароля, которую пользователь может использовать для входа в программу, и указать, используют ли они действительные или недействительные учетные данные.
Поэтому я попытался сравнитьэто все мои варианты паролей и даже пытался сравнить его с точной строкой, которая является паролем в файле, но он все еще не работает, и я не могу найти, где моя логика не работает внутри него.
Моя программа аутентификации, в которой пользователь вводит свое имя пользователя и пароль .:
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