java注册问题
例如,当我尝试注册一个叫Eric的人,然后再次注册Eric时,它就起作用了。这不应该发生在我的代码中。如果列表中已有Eric,则不应注册Eric。这是我的全部代码:java注册问题,java,Java,例如,当我尝试注册一个叫Eric的人,然后再次注册Eric时,它就起作用了。这不应该发生在我的代码中。如果列表中已有Eric,则不应注册Eric。这是我的全部代码: private Person findName(String name) { for (Person person : personer) { if (person.getName() == name) { return person;
private Person findName(String name) {
for (Person person : personer) {
if (person.getName() == name) {
return person;
}
}
return null;
}
private boolean containsName(String name) {
return findName(name) != null;
}
您的问题在于这一行:
if (person.getName() == name)
你想要
if (person.getName().equals(name))
在Java中,“==”是非基元类型的引用相等。对name
(即其“地址”(如果愿意)的引用与对getName()
返回的对象的引用不同
另请参见:您的问题在于这一行:
if (person.getName() == name)
你想要
if (person.getName().equals(name))
在Java中,“==”是非基元类型的引用相等。对name
(即其“地址”(如果愿意)的引用与对getName()
返回的对象的引用不同
另请参见:布赖恩的回答是正确的。但是,在“森林而不是树木”级别上,代码的设计也需要固定:
如果您想要一个已排序名称的集合,并且能够搜索现有名称,那么应该使用
TreeMap
。一个ArrayList
(您在每次插入时都会对其进行排序)是完全错误的数据结构。Brian的答案是正确的。但是,在“森林而不是树木”级别上,代码的设计也需要固定:
如果您想要一个已排序名称的集合,并且能够搜索现有名称,那么应该使用
TreeMap
。一个ArrayList
(您在每次插入时都会对其进行排序)是完全错误的数据结构。+1用于获取错误的代码部分。然而,代码的设计也是错误的(见我的帖子),在修复之后,就不再需要手动比较名称了,所以这个问题就不会出现了。我倾向于谨慎地避免在这里打开那罐蠕虫,但你是绝对正确的。+1用于获得错误的代码部分。然而,代码的设计也是错误的(请参阅我的帖子),在修复之后,就不再需要手动比较名称了,所以这个问题就不会出现。我倾向于谨慎地在这里打开那罐蠕虫,但你是绝对正确的。或者是树集
。甚至是一个哈希集
。当然,如果你只有五个左右的用户,那没什么大不了的…@Brian:+1是的,你是对的,TreeSet
也不错,不过通过使用名称键控的映射,你可以使用自然排序,而不必编写自定义比较器。(HashSet
在一般情况下是可以的,但这里OP希望项目按名称排序。)或TreeSet
。甚至是一个哈希集
。当然,如果你只有五个左右的用户,那没什么大不了的…@Brian:+1是的,你是对的,TreeSet
也不错,不过通过使用名称键控的映射,你可以使用自然排序,而不必编写自定义比较器。(HashSet
在一般情况下是可以的,但这里OP希望按名称对项目进行排序。)