我正在为拍卖系统开发一个控制台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;
}
}
这是我最初的想法,但它不起作用,我认为我没有以正确的方式访问链接列表中的数据或类似的东西,但不知道如何修复它:( 有任何想法吗?提前谢谢!
答案 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;
}
}
}