如何在同一个包的类之间传递LinkedList的内容

时间:2015-03-08 16:13:40

标签: java

我正在为拍卖系统开发一个控制台java程序。在主类(auctioningSystem)中,我对用户的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,用户名和密码作为参数传递)

问题是如何将键盘生成的用户名和密码与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 个答案:

答案 0 :(得分:1)

似乎主要问题已经解决;但是给出一些进一步的建议:输出看起来像“User @ 72ea2f77”的原因是由于使用了toString()(继承自java.lang.Object)的“默认”实现。您可能希望覆盖toString()以产生更有用的输出,例如:

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

您可以使用高级for循环,并根据用户名和密码检查每个用户对象

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