Java ArrayList 包含未返回预期结果的方法
Java ArrayList contains method not returning expected result
我正在对名为 "users" 的 Arraylist<object>
创建一个简单的检查。用户对象有用户名和密码字段。我正在创建一种删除用户的方法,但它没有返回所需的结果。
public void remove(){
if(users.contains(in.nextLine())) //if ArrayList contains username you want to remove
users.remove(this);
else
System.out.println("There is not a user with that name");
}
问题是当我输入与用户 ArrayList 中已有的用户名完全相同的用户名时,它仍然是 returns else 语句。我有一种预感,这是因为我的 equals/hashcode overrides
在 class 它继承自.. 它们只是 Eclipse 生成的通用的。
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserAccount other = (UserAccount) obj;
if (username == null) {
if (other.username != null)
return false;
} else if (!username.equals(other.username))
return false;
return true;
}
****编辑****
等于覆盖在超级 class "UserAccount" 中。我创建了一个继承 UserAccount 的 "FacebookUser" class,然后创建了继承 FacebookUser 的 "Facebook" class。 "Facebook" class 是我的相关方法所在的位置。每个的构造函数是
UserAccount(String username, String password){
this.username = username;
this.password = password;
}
Facebook(String username, String password){ //FacebookUser the same
super(username, password);
}
并通过此方法将它们添加到列表中
public void add(){
System.out.println("Add username..");
if(users.contains(username = in.nextLine()))
System.out.println("Already a user of that name");
else {
System.out.println("Add password..");
users.add(new Facebook(username, in.nextLine()));
}
}
有没有更好的方法可以覆盖 equals 以使此代码正常工作?感谢您的回复,我确实尝试 if(users.toString().contains(in.nextLine()))
并给出了预期的结果。我的 toString() 覆盖 returns this.username;
另外我在这里打错了电话 users.remove(this);
假设 in.nextLine()
return 是 String
,users.contains()
永远不会 return true
,因为你的 User
对象的equals
方法在您传递任何字符串时生成 false
。
要解决此问题,请立即调用 remove
,并将结果与 null
进行比较以决定打印输出:
User removed = users.remove(this);
if (removed == null) {
System.out.println("There is not a user with that name");
}
请注意,这会删除当前用户,而不是 in.nextLine()
字符串标识的用户。如果您想让用户按某个字符串名称进行组织,请使用 Map<String,User>
而不是列表。
我正在对名为 "users" 的 Arraylist<object>
创建一个简单的检查。用户对象有用户名和密码字段。我正在创建一种删除用户的方法,但它没有返回所需的结果。
public void remove(){
if(users.contains(in.nextLine())) //if ArrayList contains username you want to remove
users.remove(this);
else
System.out.println("There is not a user with that name");
}
问题是当我输入与用户 ArrayList 中已有的用户名完全相同的用户名时,它仍然是 returns else 语句。我有一种预感,这是因为我的 equals/hashcode overrides
在 class 它继承自.. 它们只是 Eclipse 生成的通用的。
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserAccount other = (UserAccount) obj;
if (username == null) {
if (other.username != null)
return false;
} else if (!username.equals(other.username))
return false;
return true;
}
****编辑**** 等于覆盖在超级 class "UserAccount" 中。我创建了一个继承 UserAccount 的 "FacebookUser" class,然后创建了继承 FacebookUser 的 "Facebook" class。 "Facebook" class 是我的相关方法所在的位置。每个的构造函数是
UserAccount(String username, String password){
this.username = username;
this.password = password;
}
Facebook(String username, String password){ //FacebookUser the same
super(username, password);
}
并通过此方法将它们添加到列表中
public void add(){
System.out.println("Add username..");
if(users.contains(username = in.nextLine()))
System.out.println("Already a user of that name");
else {
System.out.println("Add password..");
users.add(new Facebook(username, in.nextLine()));
}
}
有没有更好的方法可以覆盖 equals 以使此代码正常工作?感谢您的回复,我确实尝试 if(users.toString().contains(in.nextLine()))
并给出了预期的结果。我的 toString() 覆盖 returns this.username;
另外我在这里打错了电话 users.remove(this);
假设 in.nextLine()
return 是 String
,users.contains()
永远不会 return true
,因为你的 User
对象的equals
方法在您传递任何字符串时生成 false
。
要解决此问题,请立即调用 remove
,并将结果与 null
进行比较以决定打印输出:
User removed = users.remove(this);
if (removed == null) {
System.out.println("There is not a user with that name");
}
请注意,这会删除当前用户,而不是 in.nextLine()
字符串标识的用户。如果您想让用户按某个字符串名称进行组织,请使用 Map<String,User>
而不是列表。