Я разрабатываю консольную Java-программу для системы аукционов. В основном классе (аукционингSystem) я жестко запрограммировал LinkedList пользователей:
//Linked lists declared to store, auctions, users, and items
private static LinkedList<User> users = new LinkedList<User>();
public AuctioningSystem(){
}
public static void main(String[] args) {
//inserting users in the system, buyers and sellers (hard-coded)
users.add(new User("Abel", "pw123", "Seller"));
users.add(new User("Kamil", "pw123", "Seller"));
users.add(new User("Rob", "pw123", "Seller"));
...
Теперь я хочу вызвать метод класса User (из системного класса), который я использую для проверки имени пользователя и пароля (передавая LinkedList, имя пользователя и пароль в качестве аргументов)
Вопрос в том, как мне сравнить имя пользователя и пароль, введенные с клавиатуры, с именами пользователей и паролями в Связанном списке?
Когда я распечатываю содержимое связанного списка, он показывает:
Iterator<User> iterator = users.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next());
}
Содержание:
Пользователь @ 72ea2f77
Пользователь @ 33c7353a
Пользователь @ 681a9515
Это метод класса User для проверки логина пользователя:
public static boolean validateLogIn( LinkedList<User> users, String username, String password){
Iterator<User> spin = users.iterator();
while (spin.hasNext()){
System.out.println("I'm roling");
if(username.equals(users.contains(username)) && password.equals(users.contains(password))){
System.out.println("BINGO!");
return userLogedIn=true;
}
else{
return false;
}
}
Это моя первоначальная идея, но она не работает, я думаю, что неправильно обращаюсь к данным в связанном списке или что-то в этом роде, но не знаю, как это исправить :( Есть идеи? Заранее спасибо !
3 ответа
Вам необходимо извлечь пользователя из итератора, используя Iterator.next ().
Образец кода:
public static boolean validateLogIn( LinkedList<User> users,
String username, String password) {
Iterator<User> spin = users.iterator();
while (spin.hasNext()) {
User user = spin.next();
System.out.println("I'm roling");
if(username.equals(user.getUsername()) &&
password.equals(user.getPassword())) {
System.out.println("BINGO!");
return userLogedIn=true;
} else {
return false;
}
}
}
Думаю, было бы лучше перенести валидацию внутри класса User
. Подобно:
public boolean validate(String username, String password) {
if (!password.equals(this.password))
return false;
if (!username.equals(this.username))
return false;
return true;
}
И измените метод validateLogIn
, как показано ниже, чтобы сделать ваш код более читабельным:
public static boolean validateLogIn(LinkedList<User> users,
String username, String password) {
Iterator<User> spin = users.iterator();
while (spin.hasNext()) {
User user = spin.next();
System.out.println("I'm roling");
if (user.validate(username, password)) {
System.out.println("BINGO!");
return userLogedIn = true;
} else {
return false;
}
}
return false;
}
Вы можете использовать расширенный цикл for и проверять каждый пользовательский объект на предмет имени пользователя и пароля.
for (User user: users)
if(username.equals(user.getName()) && password.equals(user.getPassword())){
System.out.println("BINGO!");
return userLogedIn=true;
}
else{
return false;
}
}
}
Кажется, что главный вопрос уже решен; но чтобы дать дополнительный совет: причина того, что вывод выглядит как «User @ 72ea2f77», вызвана тем, что используется реализация «по умолчанию» для toString () (унаследованная от java.lang.Object). Возможно, вы захотите переопределить toString (), чтобы получить более полезный результат, например:
@Override
public String toString() {
return "Name: " + getName();
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.