Поиск переменной specfi c в массиве классов - PullRequest
1 голос
/ 06 мая 2020

Привет, у меня есть массив объектов, и я хочу иметь метод, который просматривает массив классов nameList и находит определенную c фамилию, а затем возвращает экземпляр, который соответствует фамилии с обоими первыми и фамилия.

Name[] nameList= new Name[] {
    new Name("Mason","Akman"),
    new Name("Ethan","Aldo"),
    new Name("Pi","Manly"),
    new Name("Shu","Hing"),
    new Name("Mane","Dove"),
    new Name("Minky","Maduno")}:

То, что у меня есть, это

public Name lookup(String lastname) {
    for (Name lookup : nameList) {
          if (lookup.equals(lastname)) {
             return nameList;
          } else {
             continue;
          }
        }
}

Однако это не сработает, так как я не могу преобразовать Name [] в Name. Не могу понять, где я ошибаюсь, любая помощь будет принята с благодарностью.

изменить: вот имя class

public class Name {

private String firstName;
private String lastName;

public Name(String firstName,String lastName) {
    this.setFirstName(firstName);
    this.setLastName(lastName);
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String toString() {
    return "First Name: "+this.firstName+
            "Last Name: "+this.lastName;
}

}

Ответы [ 3 ]

0 голосов
/ 06 мая 2020
  1. Непустой метод должен иметь возвращаемое значение для всех ветвей. У вас есть оператор if, и вы готовите возврат для истинного случая, и это хорошо. Также вам необходимо подготовить возврат за ложный случай (или любой другой случай). Если вы этого не сделаете, в конечном итоге вам придется что-то вернуть, прежде чем вы покинете метод.
  2. Тип возвращаемого значения должен совпадать с сигнатурой метода. Вы объявляете метод как public Name lookup(String lastname). Он должен возвращать Name, а не массив Name.
  3. Object.equals () доступный для всех экземпляров. Но если вы хотите найти Имя, проверив их фамилию , вам следует выполнить проверку equals () для этого атрибута

    public Name lookup(String lastname) {
        for (Name lookup : nameList) {
            if (lookup.getLastName().equals(lastname)) { // check the input parameter against the lastName attribute of the Name object, not the Name itself
                return lookup; // if a match is found, return the name and end this routine
            } else { // unnecessary, but not an error. for-loop will push the iteration forward, you don't have to do it yourself
                continue;
            }
        }
    
        return null; // if this line is reached, means no matched is found, return a null
    }
    
0 голосов
/ 06 мая 2020

Этого легко добиться с помощью java -8 Stream API. Просто создайте поток, отфильтруйте найденный lastname и верните первый Name экземпляр, прошедший фильтр. В противном случае верните null.

Приведенный ниже код должен работать, если предоставленный lastname не null:

 public Name lookup(String lastname){
        return Arrays.stream(nameList)
                .filter(n -> lastname.equals(n.getLastName()))
                .findFirst()
                .orElse(null);
 }
0 голосов
/ 06 мая 2020

Есть 2 проблемы с вашим кодом:

1) тип возвращаемого значения ожидает, что будет возвращено Имя и весь список имен 2) Метод должен что-то вернуть, поэтому за пределами вашего for l oop, вам нужно добавить оператор возврата и вы можете вернуть значение по умолчанию null, если подходящее имя не было найдено.

public Name lookup(String lastname) {
    for (Name lookup : nameList) {
        if (lookup.getLastName().equals(lastName)) {
            return lookup; //Changed this line to return lookup (a Name) instead of nameList
        } 
//      else { //The else is unnecessary
//          continue;
//      }
    }

    return null; //Added this as a default return when no matching name was found
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...