Использование объекта-итератора для обхода массива и проверки, превышает ли он значение - PullRequest
0 голосов
/ 05 мая 2018

У меня есть статический метод, и я должен его завершить.

Что мне нужно сделать, так это использовать Iterator, чтобы проверить, больше ли координата y, чем наибольшее значение, и вернуть это значение. Вот что у меня сейчас.

import java.awt.*;

public static Point highestPoint(List<Point> points) {
Iterator<Point> pointIterator = points.iterator();
int highest = 0;
Point highestPoint = null;
while (pointIterator.hasNext()) {
   pointIterator.next()
    if (points.getY() > highest) {
      highest = points.get(Y);
  }

}


return highestPoint;
}

Когда я запускаю свой код, я получаю синтаксическую ошибку, говорящую это:

Main.java:12: error: cannot find symbol
  if (points.getY() > highest) {
            ^
symbol:   method getY()
location: variable points of type List<Point>
Main.java:13: error: cannot find symbol
      highest = points.getY();
                      ^
symbol:   method getY()
location: variable points of type List<Point>
2 errors

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Сохранить результат next() в переменной

Point currentPoint = pointIterator.next();

Проверьте, является ли текущий highestPoint null. Если это так, установите currentPoint как самое высокое:

if(highestPoint == null)
    highestPoint = currentPoint;

В противном случае сравните самую высокую точку с текущей:

if(highestPoint == null)
    highestPoint = currentPoint;
else if(highestPoint.getY() < currentPoint.getY())
    highestPoint = currentPoint;

Нет необходимости в int highest. Ваш конечный результат будет:

public Point highestPoint(List<Point> points) {
    Point highestPoint = null;

    Iterator<Point> pointIterator = points.iterator();
    while(pointIterator.hasNext()) {
        Point currentPoint = pointIterator.next();

        if(highestPoint == null || highestPoint.getY() < currentPoint.getY())
            highestPoint = currentPoint;
    }

    return highestPoint;
}
0 голосов
/ 05 мая 2018

points - это список, поэтому вы не можете вызвать getY () для него. Вам нужно сначала получить объект Point из вызова pointIterator.next (), а затем вызвать для него метод getY ().

while (pointIterator.hasNext()) {
    Point point = pointIterator.next();
    if (point.getY() > highest) {
        highest = point.get(Y);
     }
}

Вы также можете достичь того же, используя потоки и удалив весь код шаблона

Point highest = points.stream().max((p1, p2) -> p1.getY() > p2.getY() ? 1 : -1).get();
...