Java: Могу ли я инициализировать функцию напрямую, не преобразовывая ее в переменную? - PullRequest
0 голосов
/ 12 января 2020

Для первого кода: findContact(String name) не вернул ни одного контакта, а вернул "Ошибка при поиске контакта".

Первый код не работал :

public Contacts findContact(String name) {
    for (int i = 0; i < contactsArray.size(); i++) {
        if (contactsArray.get(i).getName().equals(name)) {    // USED IT DIRECTLY
            return contactsArray.get(i);
        } else {
            System.out.println("Error in finding contact");
        }
    }

    return null;
}

Для второго кода: findContact(String name) возвращен контакт с тем же «именем», введенным для первого кода.

Код, указанный ниже, работал :

public Contacts findContact(String name) {
    for (int i = 0; i < contactsArray.size(); i++) {
        Contacts contact = contactsArray.get(i);   // ADDED A CONTACTS VARIABLE
        if (contact.getName().equals(name)) {
            return contactsArray.get(i);
        } else {
            System.out.println("Error in finding contact");
        }
    }

    return null;
}

Ответы [ 3 ]

0 голосов
/ 12 января 2020

Оба кодовых блока практически одинаковы. Согласно вашей логике c, если в первый раз элемент ввода не соответствует, вы достигнете условия else, что логически неверно. Может быть, вход прошел каждый раз был бы другим. И, как предположили некоторые члены, логика c неверна. Не обязательно присваивать переменную, как вы пытались во втором блоке. Но использование улучшенного для l oop делает код еще лучше. Я предлагаю изменить лог c примерно так:

public Contacts findContact(String name) {
    for(Contacts contact: contactsArray){
        if(null!=name && name.equals(contact.getName())){
            return contact;
       }
    }
    System.out.println("Error in finding contact");
    return null;
}
0 голосов
/ 12 января 2020

используйте foreach для чистого кода

public Contacts findContact(String name) {
    if(name != null) {
       for (Contacts contact : contactsArray) {
          if (name.equals(contact.getName())) {
            return contact;
          }
       }
    }
    System.out.println("Error in finding contact:".concat(name));
    return null;
}

, если вы используете java 8

public Contacts findContact(String name) {
    Contacts contact = null;
    if(name != null) {
        contact = contactsArray.stream()
          .filter(contactAux -> name.equals(contactAux.getName()))
          .findAny()
          .orElse(null);
    }
    if(contact == null)
        System.out.println("Error in finding contact:".concat(name));
    return contact;
}
0 голосов
/ 12 января 2020

, хотя я не совсем понимаю ваше намерение, небольшая модификация кода, как показано ниже, поможет вам.

    public Contacts findContact(String name) {
        for (int i = 0; i < contactsArray.size(); i++) {
           if (contactsArray.get(i).getName().equalsIgnoreCase(name)) {
           /*or below line if you wanted to have a relaxed search
            if(contactsArray.get(i).getName().toLowerCase().contains(name.toLowerCase()))
           */
            return contactsArray.get(i);
            }
        }
        System.out.println("Error in finding contact");
        return null;
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...