我是OO的新手。我刚开始用Java编写大学课程。
我有一个问题: 我在俱乐部课程中有一种方法可以根据我的工作表搜索会员的姓名(或姓名的一部分)。 我有一个测试这个的课程,我不必手动创建Club类中的对象(我使用BlueJ)。
这是搜索方法:
public void searchMember(String name){
i=0;
found = false;
while( i < members.size() && !found ){
if(members.contains( name )){
found = true;
}else{
i++;
}
}
if(found == true){
System.out.println(members.get(i));
}else{
System.out.println("Och Naw ... Member not found.");
}
}
这是测试类代码:
public void demo()
{
club = new Club();
club.join(new Membership("Gordy Broon", 1, 1972));
club.join(new Membership("Eck Salmon", 9, 1965));
club.join(new Membership("Davie Caramel", 5, 1960));
System.out.println("Now doing some searching: ");
club.searchMember( "mon" );
System.out.println(" ");
System.out.println("And some more searching: ");
club.searchMember("moon");
System.out.println(" ");
}
有人可以向我解释为什么在搜索&#34; mon&#34;结果没找到?
根据我的理解,这应该有用。
我很新,所以任何帮助和解释都会很棒^ _ ^ 谢谢!
答案 0 :(得分:1)
您正在将String与成员资格进行比较。 contains
的{{1}}方法将遍历列表中的每个项目并检查List
,但"mon".equals(membership)
对象是否可能永远不会返回true,它等于某些字符串
(我假设你的Membership
课程,你没有从Membership
覆盖equals
方法。可以覆盖java.lang.Object
以便与equals
将违反其合同。预计如果equals
然后a.equals(b)
,但没有b.equals(a)
对象永远存在返回true表示它等于您的java.lang.String
个对象之一,并且您无法修改Membership
以使其执行此操作。)
您要做的是浏览列表并检查是否有任何成员资格对象的名称包含“mon”。我假设您的Membership对象有一个java.lang.String
方法:
getName()
在Java 8中可以更简洁地执行此操作:
for (Membership membership : members) {
if (membership.getName().contains(name)) {
System.out.println(membership);
return;
}
}
System.out.println("Och Naw ... Member not found.");
这将查找列表中与名称必须包含指定名称的条件匹配的第一项,然后使用其Optional<Membership> maybeMember = membership.stream()
.filter(m -> m.getName().contains(name)).findFirst();
String result = maybeMember.map(m -> m.toString())
.orElse("Och Naw ... Member not found.");
System.out.println(result);
方法将其映射到字符串,否则如果没有匹配项则使用默认字符串从列表中找到了。
答案 1 :(得分:0)
似乎成员是一个列表。所以,当你执行members.contains(name)时,它不会工作。您需要执行以下成员.get(i).getName()。contains(name)。