Java Iterator, который возвращает Null - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь написать метод в java, используя Iterator, который выполняет итерацию по некоторым комментариям на предмет продажи и возвращает комментарий, который наиболее полезен на основе голосов за комментарий.Тем не менее, в тех случаях, когда вообще нет комментариев, я хочу, чтобы код возвращал ноль.Но моя проблема в том, что приведенный ниже код дает мне «нет такого исключения элемента», как я могу это исправить?

 public Comment findMostHelpfulComment()
{
    Iterator<Comment> it = comments.iterator();
    Comment best = it.next();
    while(it.hasNext()) 
    {
        Comment current = it.next();
        if(current.getVoteCount() > best.getVoteCount()) {
            best = current;
        }

    }
    return best;
} 

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019
public Comment findMostHelpfulComment() {
    Iterator < Comment > it = comments.iterator();
    Comment best = new Comment();
    while (it.hasNext()) {
        Comment current = it.next();
        if (current.getVoteCount() > best.getVoteCount()) {
            best = current;
        }
    }
    return best;
}

Пожалуйста, попробуйте вышеуказанный код.Вместо использования it.next() во время объявления, лучше объявить его с пустым Comment объектом.Таким образом, он пропустит выборку данных из Iterator без проверки.

Это не будет выбрасывать java.util.NoSuchElementException.

0 голосов
/ 15 февраля 2019
public Comment findMostHelpfulComment()
{
    if (comments.isEmpty()== true){
        return null;
    }
    else{

    Iterator<Comment> it = comments.iterator();
    Comment best = it.next();
    while(it.hasNext()) 
    {
        Comment current = it.next();
        if(current.getVoteCount() > best.getVoteCount()) {
            best = current;
        }

    }
    return best;
}

}

0 голосов
/ 12 февраля 2019
Comment best = it.next();

это даст вам исключение nosuch элемента, если комментарии нулевые.либо нужно проверить на ноль, либо сделать it.hasNext() до Comment best = it.next()

...