2015-03-08 2 views
2

Я разрабатываю консольную java-программу для системы аукционов. В главном классе (auctioningSystem) Я жестко закодированы LinkedList пользователей:Как передать содержимое 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")); 

...

Теперь я хочу, чтобы вызвать метод класса пользователя (от системного класса), что я (используя LinkedList, имя пользователя и пароль в качестве аргументов)

Вопрос: Как сделать, чтобы сравнить имя пользователя и пароль, введенные с клавиатуры с именами пользователей и паролями в LinkedList?

Как при печати содержимого связанного списка показывает:

Iterator<User> iterator = users.iterator(); 
    while(iterator.hasNext()) 
    { 
     System.out.println(iterator.next()); 
    } 

Содержание:

Пользователь @ 72ea2f77

Пользователь @ 33c7353a

Пользователь @ 681a9515

Это метод класса Пользователь для подтверждения входа пользователя:

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; 
     } 
    } 

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

ответ

0

Вам необходимо извлечь пользователя из итератора, используя 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

СПАСИБО ВАС! очень полезно! ;) – Tofetopo

+0

Если он решает вашу проблему, тогда отметьте ответ как принятый. – Ambrish

+0

Я думаю, что это более близкий подход, но по какой-то причине все еще не соответствует имени пользователя и паролю в инструкции if, поэтому не удается войти в систему. Я продолжу сжимать свой мозг немного больше. – Tofetopo

0

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

for (User user: users) 
     if(username.equals(user.getName()) && password.equals(user.getPassword())){ 
      System.out.println("BINGO!"); 
      return userLogedIn=true; 
     } 
     else{ 
      return false; 
     } 
    } 
} 
1

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

@Override 
public String toString() { 
    return "Name: " + getName(); 
} 
+0

Он работал, чтобы распечатать контент, спасибо! – Tofetopo

Смежные вопросы