Как обнаружить строку в ArrayList с a для каждого l oop? - PullRequest
0 голосов
/ 16 апреля 2020

publi c String searchNumber (String name) {String result = "";

    for(Person search: person){
        if(search.getName().contains(name)){
            result += search.getNumber();
        }
        else{
            result = " number not known ";
        }
    }
    return result;

}

Ищите здесь несколько советов о том, как решить эту проблему, с которой я столкнулся. Это метод, который я ожидаю использовать для получения метода getName, чтобы увидеть, находится ли локальный экземпляр (имя) в ArrayList. Тем не менее, я получаю только последний результат, показывающий «число не известно». Мой пошаговый процесс выглядит следующим образом: я создаю экземпляр Person (search), получаю доступ к методу getName, обращаюсь к методу contains, поскольку он изначально является методом String, а затем проверяю, находится ли локальный экземпляр в ArrayList. Если мой лог c неверен, пожалуйста, исправьте меня. Кроме того, доступ к массиву person не позволяет мне использовать тип String в моем for-each l oop, поскольку это объект Person? Я попытался сделать это с типом String, но не смог продолжить, так как не смог преобразовать в String в пределах для каждого l oop.

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

Вот код вашего текущего кода:

Вы рассматриваете каждый объект в списке person. Если имя этого человека соответствует параметру, вы получите номер из него. В противном случае вы устанавливаете result на сообщение об ошибке. Обратите внимание, что условие об остальном применяется для КАЖДОГО человека, а не в конце, если было обнаружено, что НИКТО не имеет того же имени. То есть, даже если вы найдете нужного человека и назначите result его номеру, если следующий человек не прав, вы снова перезапишете result в сообщении об ошибке.

Чтобы убедиться, что ошибка сообщение назначается только один раз и только если НИКТО не найдено, вам нужно проверить, верно ли это, пройдя через всех (так как вы не можете узнать, найден ли никто, прежде чем проверять всех!). Хитрость заключается в том, чтобы найти какой-то пункт, который всегда верен, когда никто не был найден. Но это может быть просто, если result никогда не изменялся. То есть вы можете установить result в значение по умолчанию при объявлении, а затем изменить его на число, только если был найден нужный человек. Кроме того, я предполагаю, что должен быть найден только один человек, и вы не хотите на самом деле объединять числа вместе (что вы и делаете, используя +=). Тем не менее, попробуйте это:

public String searchNumber(String name){
    for (Person search: person){
        if (search.getName().contains(name)){
            return search.getNumber();
        }
    }

    return " number not known ";
}
0 голосов
/ 16 апреля 2020
String result = null;
for(Person search: person){
    if(search.getName().contains(name)){
        result += search.getNumber();
    }

}
if(result == null){
    result = "number not known ";
}
return result;

Поскольку невозможно определить последний элемент в for-in l oop, поэтому альтернатива основана на result == null

0 голосов
/ 16 апреля 2020

В основном вы можете просто вернуться после нахождения вашей записи

String notFound = " number not known ";
for(Person search: person){
    if(search.getName().contains(name)){
        return search.getNumber();
    }
}
return notFound;
...