【问题标题】:How I can determine if there is another element after the current one or not in java using list Structures in java如何使用 java 中的列表结构来确定当前元素之后是否还有另一个元素
【发布时间】:2019-05-23 18:39:08
【问题描述】:

我正在尝试编写一个名为 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;
    }

//类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}。它会返回错误

【问题讨论】:

  • 你把一个List排序在一个元素中,请提供你使用的方法的代码

标签: java linked-list structure element implementation


【解决方案1】:

您的方法可以改进。看看

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

您不需要循环到 LinkledList 的末尾,您应该只关心接下来的内容。

【讨论】:

  • 我怎样才能用这样的 hasNext() 函数准确地编写测试用例?
【解决方案2】:

这一行:

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

断言总是失败,因为您正在创建一个航点,然后尝试在现有航点列表中找到它。但是这个新的航点不在列表中

列表中唯一的航点是您添加的航点,这是一个全新的航点,恰好与您列表中的一个航点具有相同的 x 和 y 值。

您没有包含TourElement.addStart 方法的代码,所以我无法判断那里是否有任何问题。其他人指出,您不需要在hasNext 中使用循环。但这里的主要问题是,除了使用传递给hasNext 方法的WayPoint 之外,您还需要做一些事情。这可能涉及遍历航路点图,试图找到与传入方法的 x 和 y 值相同的现有 WayPoint,然后检查 that 是否有 next .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2011-08-24
    • 1970-01-01
    • 2018-09-19
    • 2020-07-07
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多