英文:
how to set up search method in java
问题
I'm here to provide the translated code and text:
我是Java的新手,我正在尝试创建一个名为`searchListBySurName`的方法,该方法接受一个字符串参数,并根据是否存在具有相应姓氏的姓名返回true或false。
这是我目前的代码:
public boolean searchListBySurName(String SurName)
{
if (list.contains(SurName)) {
return true;
} else {
return false;
}
}
这是我用来测试该方法的测试数据:
public void testSearchListBySurName() {
r.addName(new Name("Joe", "Bloggs"));
r.addName(new Name("Fred", "Jones"));
assertTrue("第一次搜索应该找到Jones,即返回true", r.searchListBySurName(new String("Jones")));
r = new Register();
r.addName(new Name("Joe", "Bloggs"));
r.addName(new Name("Fred", "Wayne"));
assertFalse("第二次搜索不应该找到Jones,即返回false", r.searchListBySurName(new String("Jones")));
}
但是,测试结果一直显示为失败。我犯了什么错误,该如何修复它?
英文:
I’m new to Java and I’m trying to make a method called searchListBySurName
that accepts a String argument and returns true or false depending on whether a name exists with that respective last name.
Here is what I have so far:
public boolean searchListBySurName(String SurName)
{
if (list.contains(SurName)) {
return true;
} else {
return false;
}
}
Here is the test data I’m using to test the method:
public void testSearchListBySurName() {
r.addName(new Name("Joe", "Bloggs"));
r.addName(new Name("Fred", "Jones"));
assertTrue("First search should find Jones, i.e. return true", r.searchListBySurName(new String("Jones")));
r = new Register();
r.addName(new Name("Joe", "Bloggs"));
r.addName(new Name("Fred", "Wayne"));
assertFalse("Second search should not find Jones, i.e. return false", r.searchListBySurName(new String("Jones")));
}
But, the test keeps coming back as failed. What mistake am I making and how can I fix it?
答案1
得分: 5
你的列表是 Name
,但你搜索的是 String
,所以不会起作用。一种简单的方法是使用 for
循环:
public boolean searchListBySurname(String surname) {
for (Name name : list)
if (name.getSurname().equals(surname))
return true;
return false;
}
或者你可以使用Java 8的流:
public boolean searchListBySurname(String surname) {
return list.stream().anyMatch(name -> name.getSurname().equals(surname));
}
P.S. 还要注意方法和参数名称。
英文:
Your list is of Name
, but you search for String
, so it won't work. The straight-forward way is with a for
loop:
public boolean searchListBySurname(String surname) {
for (Name name : list)
if (name.getSurname().equals(surname))
return true;
return false;
}
Or you could use Java 8 streams:
public boolean searchListBySurname(String surname) {
return list.stream().anyMatch(name -> name.getSurname().equals(surname));
}
P.S. Also pay attention to method and parameter names.
答案2
得分: 0
可以使用 list.contains()
方法,但是你需要重写 Name
类的 equals
方法。
使用 List.contains(Object object)
方法来判断 ArrayList 是否包含一个元素对象(在这种情况下,Name 的 SurName 值相同)应该重写 equals()
方法。如果没有重写 List<E>
元素对象中的 equals()
方法,它将导致 contains()
方法始终返回 false。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Name name = (Name) o;
return Objects.equals(SurName, name.SurName);
}
在 searchListBySurName
方法中:
public boolean searchListBySurName(Name name) {
return list.contains(name);
}
然后像这样使用它:
public void testSearchListBySurName() {
r.addName(new Name("Joe", "Bloggs"));
r.addName(new Name("Fred", "Jones"));
assertTrue("第一次搜索应该找到 Jones,即返回 true", r.searchListBySurName(new Name("", "Jones")));
r = new Register();
r.addName(new Name("Joe", "Bloggs"));
r.addName(new Name("Fred", "Wayne"));
assertFalse("第二次搜索不应该找到 Jones,即返回 false", r.searchListBySurName(new Name("", "Jones")));
}
英文:
It is ok to use list.contains()
method. But you need to override the equals
method of Name
Class.
Using the List.contains(Object object)
method to determine whether the ArrayList contains an element object (for this case where the SurName value of the Name is the same) should override the equals()
method. If the equals()
method in the element Object of List<E>
is not override, it will cause the contains()
method to always return false.
@Override
public boolean equals(Name o) {
if (this.SurName = o.SurName){
return true;
} else{
return false;
}
}
In method searchListBySurName
:
public boolean searchListBySurName(Name name)
{
if (list.contains(name)) {
return true;
} else {
return false;
}
}
And Use it like this:
public void testSearchListBySurName() {
r.addName(new Name("Joe", "Bloggs"));
r.addName(new Name("Fred", "Jones"));
assertTrue("First search should find Jones, i.e. return true", r.searchListBySurName(new Name("","Jones")));
r = new Register();
r.addName(new Name("Joe", "Bloggs"));
r.addName(new Name("Fred", "Wayne"));
assertFalse("Second search should not find Jones, i.e. return false", r.searchListBySurName(new Name("","Jones")));
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论