我有一个完整的员工用于测试的链表,我想迭代它,看看是否找到了员工然后返回true,这确实有点工作但是它只会找到列表中的最后一个员工,是什么我做错了?此外,我有不同类型的员工,例如从帐户类继承的经理,对不起,如果那令人困惑!对不起还是个初学者!!感谢
这是我添加帐户的列表:
LinkedList<Account> Accounts = new LinkedList<Account>();
Employee John = new Account("John", "password1");
Manager Bob = new Account("Bob", "password2");
以下是查找员工/帐户的方法。
private boolean check(String employee) {
for (Account e : Accounts) {
if (e.getEmployee().equals(employee)) {
return true;
}
}
return false;
}
编辑:下面是我添加的代码,但它仅适用于最后一个用户。如果在链表中找到帐户名,我希望该方法返回true,以便系统可以继续并询问更多信息等。,name变量位于我的Account类
private boolean check(String employee){
for(Account a : accounts){
if(a.name.equals(employee)){
return true;
}
}
return false;
}
答案 0 :(得分:0)
无需迭代,list's contains method将为您完成
答案 1 :(得分:0)
if (e.getEmployee().equals(employee))
这将比较对象是否相同,这意味着它们在内存中相同。
您需要指定对象的哪些属性必须相等,以便在查看一个或多个属性时逻辑地说2 不同的对象是相同的。
例如
John.equals(Bob)
将永远不会成立,但如果对象John和对象Bob都具有name属性,则为String =“Alex”,那么
John.getName().equalsIgnoreCase(Bob.getName())
将是真的
答案 2 :(得分:0)
无需迭代列表。 因此,您可以使用
替换您的检查方法 private boolean check(String employee) {
return Accounts.contains(employee);
}
你应该进一步替换
Employee John = new Accounts("John", "password1");
Manager Bob = new Accounts("Bob", "password2");
与
Employee John = new Account("John", "password1");
Manager Bob = new Account("Bob", "password2");
答案 3 :(得分:0)
这里有两种选择。第一种是更改check方法的签名以使用Account
对象,或者从Account对象中提取字段以进行比较:
private boolean check(Account account){
return accounts.contains(account);
}
但是,这需要您为equals()
实施自定义Account
方法:
@Override
public boolean equals(Object obj){
if(obj instanceof Account){
Account acct = (Account)obj;
//Compare any internal fields that mean it's "equal"
if(acct.prop1 == this.prop1 && ...) {
return true;
}
}
return false;
}
您的另一个选择是与迭代中的特定字段进行比较:
private boolean check(String emp){
for(Account a : accounts){
if(a.stringProperty.equals(emp)){
return true;
}
}
return false;
}