метод, требующий оператора return за пределами цикла - PullRequest
0 голосов
/ 27 июня 2018

Я столкнулся с проблемой на Eclipse с моим методом здесь. Мне необходимо вернуть Country объект, если объект найден в массиве с именем catalog, и вернуть null, если он не найден. Я попытался перебрать каталог и сделать это. Однако Java требует, чтобы я добавил оператор возврата вне цикла for моего кода. Однако когда я добавляю инструкцию return вне цикла for, когда метод выполняется, он полностью игнорирует цикл for и возвращает только инструкцию вне цикла for.

public Country findCountry(String countryname) {
    for (int i = 0; i < catalogue.length; i++) {
        if (catalogue[i].getName() == countryname) {
            return catalogue[i];
        } else {
            return null;
        }
    }
}

Редактировать: Добавлена ​​переменная foundCountry перед циклом и возвращена после. Добавил разрыв и сравнил строки, используя .equals (). Получение исключения NullPointerException.

public Country findCountry(String countryname) {
        Country foundCountry = null;
        for (int i = 0; i < catalogue.length; i++) {
            if (catalogue[i].getName().equals(countryname)) {
                foundCountry = catalogue[i];
                break;
            }
        }
        return foundCountry;
    }

Ответы [ 5 ]

0 голосов
/ 27 июня 2018

Другая версия с использованием потока (требуется Java 8 или выше) и проверка для catalogue не null:

public Country findCountry(String countryName) {
    if (catalogue == null) {
        return null;
    }

    return Arrays.stream(catalogue)
        .filter(country -> country.getName().equals(countryName))
        .findAny()
        .orElse(null);
}
0 голосов
/ 27 июня 2018
public Country findCountry(String countryname) {
        Country foundCountry = null;
        for (int i = 0; i < catalogue.length; i++) {
            if (catalogue[i].getName().equals(countryname)) {
              foundCountry = catalogue[i];
              break;
            }
        }
        return foundCountry;
    }

при обнаружении прервите цикл для повышения производительности. Если не найдено, по умолчанию возвращается ноль.

0 голосов
/ 27 июня 2018

удалить

else {
            return null;
     }

и поместите это вне цикла for

return null;

Ваш код возвращает ноль, если страна не находится на первом элементе в каталоге. Он не проходит через это.

0 голосов
/ 27 июня 2018

Вы можете инициализировать возвращаемое значение с нуля и установить его, только если найдено в цикле:

    public Country findCountry(String countryname) {
        // initialize a Country with null
        Country foundCountry = null;
        // try to find it
        for (int i = 0; i < catalogue.length; i++) {
            if (catalogue[i].getName().equals(countryname)) {
                // set it if found
                foundCountry = catalogue[i];
            }
        }
        // if not found, this returns null
        return foundCountry;
    }
0 голосов
/ 27 июня 2018

Изменение

catalogue[i].getName() == countryname

до

catalogue[i].getName().equals(countryname)

И не return null из части else. Сделайте это, когда цикл завершен, и ничего не найдено следующим образом:

public Country findCountry(String countryname) {
    for (int i = 0; i < catalogue.length; i++) {
        if (catalogue[i].getName().equals(countryname)) {
            return catalogue[i];
        }
    }
    return null;
}

Обратите внимание, что это не Нуль доказательство.

...