如何使用 java 中的列表结构确定 java 中当前元素之后是否还有另一个元素
How I can determine if there is another element after the current one or not in java using list Structures in java
我正在尝试编写一个名为 boolean hasNext() 的函数,它检查当前元素之后是否还有另一个元素
我有一个名为 TourElement 的 class,它包含很多点。
这是我的代码
// class 航点:
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 旅游元素
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} 这样的点,它将 return 为真,因为在这个点之后还有一个点。但是当我通过 {2,2} 时。它会 return false
你的方法可以改进。看看
boolean hasNext(){
if (this.next != null) return true;
return false;
}
你不需要循环到LinkledList的末尾,你应该只关心接下来是什么。
这一行:
assertEquals(true,elem.hasNext(createWaypoint(1, 1)));
断言总是失败,因为您正在创建一个 新 航路点,然后试图在现有 waypoints 列表中找到它。但是这个新的航路点 不在列表 中。
列表中唯一的 waypoints 是您添加的,这是一个全新的航路点,恰好与中的 waypoints 之一具有相同的 x 和 y 值你的清单。
您没有包含 TourElement.addStart
方法的代码,所以我无法判断那里是否有任何问题。其他人指出您不需要 hasNext
内的循环。但这里的主要问题是除了使用传递给 hasNext
方法的 WayPoint
之外,您还需要做一些其他事情。这可能涉及遍历航路点图,试图找到与传递给方法的 x 和 y 值相同的现有 WayPoint
,然后检查是否 that有一个 next
.
我正在尝试编写一个名为 boolean hasNext() 的函数,它检查当前元素之后是否还有另一个元素 我有一个名为 TourElement 的 class,它包含很多点。 这是我的代码 // class 航点:
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 旅游元素
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} 这样的点,它将 return 为真,因为在这个点之后还有一个点。但是当我通过 {2,2} 时。它会 return false
你的方法可以改进。看看
boolean hasNext(){
if (this.next != null) return true;
return false;
}
你不需要循环到LinkledList的末尾,你应该只关心接下来是什么。
这一行:
assertEquals(true,elem.hasNext(createWaypoint(1, 1)));
断言总是失败,因为您正在创建一个 新 航路点,然后试图在现有 waypoints 列表中找到它。但是这个新的航路点 不在列表 中。
列表中唯一的 waypoints 是您添加的,这是一个全新的航路点,恰好与中的 waypoints 之一具有相同的 x 和 y 值你的清单。
您没有包含 TourElement.addStart
方法的代码,所以我无法判断那里是否有任何问题。其他人指出您不需要 hasNext
内的循环。但这里的主要问题是除了使用传递给 hasNext
方法的 WayPoint
之外,您还需要做一些其他事情。这可能涉及遍历航路点图,试图找到与传递给方法的 x 和 y 值相同的现有 WayPoint
,然后检查是否 that有一个 next
.