Я разрабатываю консольную 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;
        }
    }

Это моя первоначальная идея, но она не работает, я думаю, что неправильно обращаюсь к данным в связанном списке или что-то в этом роде, но не знаю, как это исправить :( Есть идеи? Заранее спасибо !

2
Tofetopo 8 Мар 2015 в 19:13

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;
}
0
Ambrish 8 Мар 2015 в 16:45

Вы можете использовать расширенный цикл for и проверять каждый пользовательский объект на предмет имени пользователя и пароля.

 for (User user: users)
        if(username.equals(user.getName()) && password.equals(user.getPassword())){
            System.out.println("BINGO!");
            return userLogedIn=true;
        }
        else{
            return false;
        }
    }
}
0
Paul John 8 Мар 2015 в 16:18

Кажется, что главный вопрос уже решен; но чтобы дать дополнительный совет: причина того, что вывод выглядит как «User @ 72ea2f77», вызвана тем, что используется реализация «по умолчанию» для toString () (унаследованная от java.lang.Object). Возможно, вы захотите переопределить toString (), чтобы получить более полезный результат, например:

@Override
public String toString() {
     return "Name: " + getName();
}
1
GhostCat 8 Мар 2015 в 16:22