Как я могу получить элемент из связанного списка с данным индексом в Java? - PullRequest
2 голосов
/ 28 мая 2019

Я изучаю список ссылок в Java. и я хочу написать метод, чтобы дать значение узла на основе данного индекса

Я пишу функцию, но она не проходит некоторые тестовые случаи, и я не знаю почему ?. что не так с моей логикой?

// waypoint.java

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;
    }

// TourElement.java

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;
 }

int getNoOfWaypoints()//  return the number of waypoints in the list
{
    int count = 1;
    TourElement current = getNext();
    while(current.next != null)
    {
        count++;
        current = current.next;
        System.out.println(count);
    }
    return count;
} 

// вот метод, с которым я сталкиваюсь:

Waypoint getWaypointAt(int index)
{
   int totalElement = getNoOfWaypoints();
   int count = 0;
   TourElement current = getNext();
   if(index < totalElement && index >= 0)
   {
       while (current.next != null)
      {
        if(count == index)
          {
              return getWaypoint();
          }
         count++;
          current = current.next;
         }

       }
   return null;
}

// контрольный пример: // case 1: pass

public void test0GetWaypointAt_First() {
        TourElement elem = createElementList(new int[][] {{0, 0}, {1, 1}, {2, 2}});
        Waypoint expected = createWaypoint(0, 0);
        assertArrayEquals(expected.toArray(), elem.getWaypointAt(0).toArray());
    }

// случай 2 и случай 3: сбой

public void test0GetWaypointAt_Snd() {
        TourElement elem = createElementList(new int[][] {{0, 0}, {1, 1}, {2, 2}});
        Waypoint expected = createWaypoint(1, 1);
        assertArrayEquals(expected.toArray(), elem.getWaypointAt(1).toArray());
    }

    @Test
    public void test0GetWaypointAt_Last() {
        TourElement elem = createElementList(new int[][] {{0, 0}, {1, 1}, {2, 2}});
        Waypoint expected = createWaypoint(2, 2);
        assertArrayEquals(expected.toArray(), elem.getWaypointAt(2).toArray());
    }

Я не знаю причину. Пожалуйста, помогите мне. Большое спасибо заранее

1 Ответ

1 голос
/ 28 мая 2019

Структура, которую вы построили со списком, выглядит нормально, о вашем методе getWaypointAt Я вижу по крайней мере две проблемы:

Первая проблема

   TourElement current = getNext();

getNext() уже является следующим элементом в вашем списке, поэтому вы пропускаете первый элемент все время.Это должно быть

   TourElement current = this;

Вторая проблема

    return getWaypoint();

Возвращает путевую точку из головы все время.Должно быть

    return current.getWaypoint();

Похоже, ваш первый тест также не пройден.Я не вижу, как вы строите элементы в createElementList, это может быть причиной того, что они проходят.

...