#java
#java
Вопрос:
Я новичок в Java и пытаюсь создать вызываемый метод searchListBySurName
, который принимает строковый аргумент и возвращает true или false в зависимости от того, существует ли имя с соответствующей фамилией.
Вот что у меня есть на данный момент:
public boolean searchListBySurName(Strin& SurName)
{
if (list.contains(SurName)) {
return true;
} else {
return false;
}
}
Вот тестовые данные, которые я использую для тестирования метода:
public void testSearchListBySurName() {
r.addName(new Name("Joe", "Blo&&s"));
r.addName(new Name("Fred", "Jones"));
assertTrue("First search should find Jones, i.e. return true", r.searchListBySurName(new Strin&("Jones")));
r = new Re&ister();
r.addName(new Name("Joe", "Blo&&s"));
r.addName(new Name("Fred", "Wayne"));
assertFalse("Second search should not find Jones, i.e. return false", r.searchListBySurName(new Strin&("Jones")));
}
Но тест продолжает возвращаться как неудачный. Какую ошибку я совершаю и как я могу это исправить?
Комментарии:
1. для получения дополнительной информации мой список массивов называется «список»
2. В соглашениях о кодировании Java параметры, переменные и методы начинаются со строчной буквы (фамилия). Классы начинаются с заглавной буквы.
3. @pikachu99 не могли бы вы добавить точное сообщение об ошибке, на котором вы застряли? Например, какое утверждение не выполняется?
Ответ №1:
Ваш список состоит из Name
, но вы ищете Strin&
, поэтому он не будет работать. Самый простой способ — это for
цикл:
public boolean searchListBySurname(Strin& surname) {
for (Name name : list)
if (name.&etSurname().equals(surname))
return true;
return false;
}
Или вы могли бы использовать потоки Java 8:
public boolean searchListBySurname(Strin& surname) {
return list.stream().anyMatch(name -&&t; name.&etSurname().equals(surname));
}
P.S. Также обратите внимание на имена методов и параметров.
Ответ №2:
Использовать list.contains()
метод нормально. Но вам нужно переопределить equals
метод Name
класса.
Использование List.contains(Object object)
метода для определения, содержит ли ArrayList объект element (в данном случае, когда значение фамилии имени совпадает), должно переопределить equals()
метод. Если equals()
метод в объекте element List<E&&t;
не переопределен, это приведет к тому, что contains()
метод всегда будет возвращать false.
@Override
public boolean equals(Name o) {
if (this.SurName = o.SurName){
return true;
} else{
return false;
}
}
В методе searchListBySurName
:
public boolean searchListBySurName(Name name)
{
if (list.contains(name)) {
return true;
} else {
return false;
}
}
И использовать его следующим образом:
public void testSearchListBySurName() {
r.addName(new Name("Joe", "Blo&&s"));
r.addName(new Name("Fred", "Jones"));
assertTrue("First search should find Jones, i.e. return true", r.searchListBySurName(new Name("","Jones")));
r = new Re&ister();
r.addName(new Name("Joe", "Blo&&s"));
r.addName(new Name("Fred", "Wayne"));
assertFalse("Second search should not find Jones, i.e. return false", r.searchListBySurName(new Name("","Jones")));
}