Как я могу определить, есть ли другой элемент после текущего или нет в Java, используя список структур в Java - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь написать функцию с именем boolean hasNext (), которая проверяет, есть ли другой элемент после текущего или нет У меня есть класс с именем TourElement, он содержит много точек. Вот мой код // маршрутная точка класса:

public class Waypoint {
    int x  ;
    int y  ;
    public int getX()
    {
        return this.x;
    }
    public int getY()
    {
        return this.y;
    }
    public void setXY(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

// class tourElement

 public class TourElement {
     private Waypoint points;
     private TourElement next;

      public void setWaypoint( Waypoint points){
       this.points = points; 
     }
      public void setTourElement(TourElement next) {
          this.next = next;
      }
     Waypoint getWaypoint() {
         return this.points;
     }

     TourElement getNext(){
         return this.next;
     }

    boolean hasNext(Waypoint first){
    // What am I doing wrong here?
        TourElement current = getNext();
        while( current.next != null)
        {
            return true;
        }
        return false;

    }
    // my test case
         public void testHasNext()
        {
           TourElement elem = createElementList(new int[][] {{0, 0}, {1, 1}, {2, 2}});

            assertEquals(true,elem.hasNext(createWaypoint(1, 1)));
        }

// создать список элементов:

private TourElement createElementList(int[][] waypoints){
        assert waypoints.length > 0;
        TourElement elem = new TourElement();
        int lastIndex = waypoints.length-1;
        Waypoint wp = createWaypoint(waypoints[lastIndex][0], waypoints[lastIndex][1]);
        elem.setWaypoint(wp);
        for (int i = lastIndex-1; i >= 0 ; i--) {
            wp = createWaypoint(waypoints[i][0], waypoints[i][1]);
            elem = elem.addStart(wp);
        }
        return elem;
    }

// создать путевую точку:

private Waypoint createWaypoint(int x, int y) {
        Waypoint wp = new Waypoint();
        wp.setXY(x, y);
        return wp;
    }

Я ожидаю, что с моей функцией hasNext, если я передам точку, такую ​​как {1,1}, она вернет true, потому что есть еще одна точка после этой точки. но когда я прохожу {2,2}. он вернет false

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Эта строка:

assertEquals(true,elem.hasNext(createWaypoint(1, 1)));

Всегда будет проваливать утверждение, потому что вы создаете новую путевую точку, а затем пытаетесь найти ее в списке существующих путевых точек. Но этой новой путевой точки нет в списке .

Единственными путевыми точками в списке являются те, которые вы добавили, и это совершенно новая путевая точка, которая, как оказалось, имеет те же значения x и y, что и одна из путевых точек в вашем списке.

Вы не включили код для метода TourElement.addStart, поэтому я не могу сказать, есть ли там какая-либо проблема. А другие отметили, что вам не нужен цикл внутри hasNext. Но главная проблема здесь заключается в том, что вам нужно сделать что-то другое, чем использовать WayPoint, переданный в метод hasNext. Скорее всего, это будет связано с обходом графа путевых точек, пытающимся найти существующий WayPoint с теми же значениями x и y, что и значения, переданные в метод, и последующей проверкой, чтобы узнать, , что имеет next.

0 голосов
/ 23 мая 2019

Ваш метод может быть улучшен. Взгляните

boolean hasNext(){
    if (this.next != null) return true;
    return false;
}

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

...