У меня есть система входа в систему, которая перебирает всех клиентов, чтобы проверить, совпадают ли конкретные имя пользователя и пароль, но, похоже, она не работает. Все клиенты находятся в ObservableArrayList. Я сослался на пост это SO, чтобы сделать это изначально, но это все равно не сработало. Любая помощь будет принята с благодарностью. Спасибо.
Другая информация
TextField username,password;
Customer checkCustomer;
ObservableList<Customer> customers;
customers = FXCollections.observableArrayList();
Система входа (графический интерфейс)
if (t.getSource() == logIn){
//Owner login
if (username.getText().equals("admin") && password.getText().equals("admin")){
System.out.println("success, owner logged in");
window.setScene(primaryOwner);
}
else {
if (findRegisteredCustomer(username.getText(),password.getText()) != null){
System.out.println("Success, customer logged in");
if (checkCustomer.getPoints() < 1000){
status = "Silver";
}
else if (checkCustomer.getPoints() > 1000){
status = "Gold";
}
welcome.setText("Welcome " + checkCustomer.getUsername() + ". " + "You have " + checkCustomer.getPoints() + " points. " + "Your status is " + status + ".");
System.out.println("success, " + checkCustomer.getUsername() + " has logged in");
window.setScene(customerStartScreen);
}
else {
System.out.println("Username: " + username.getText() + ", Password: " + password.getText());
System.out.println("failed, incorrect login details");
}
}
}
найти, если клиент зарегистрирован метод
public Customer findRegisteredCustomer(String username, String password){
for(Customer customerTest: customers){
if (customerTest.getUsername().equals(username) && customerTest.getPassword().equals(password)){
System.out.println("Registered user");
checkCustomer = customerTest;
return customerTest;
}
return null;
}
return null;
}
Класс клиента
public class Customer extends User {
private int points;
public Customer(String username, String password){
super(username,password);
points = 0;
}
public Customer(String username, String password, int points){
super(username,password);
this.points = points;
}
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
}
Вы возвращаете null после блока if, удалите первый возвращаемый null в методе findRegisterdCustomer, и все будет в порядке. Также вы можете изучить хеширование, методы equals и пароли по умолчанию, а также возможные проблемы с ними.
Большое спасибо, это сработало! Спасибо за подсказку, я тоже посмотрю на хеширование.
ваша реализация цикла в findCustomer выглядит неправильно: похоже, она находит совпадение только в том случае, если учетные данные принадлежат первому клиенту в списке :) Лучше всего исправить форматирование (в частности, отступ), чтобы увидеть его.