我一直在努力解决这个问题。 Eclipse一直告诉我要将startnode和endnode的类型更改为node。我做到了这一点,我没有进展。有人可以向我解释做什么,因为它很难得到最短的路径。如果有可能指向我我的错误以及如何解决它。提前谢谢
public List<Coordinate> getShortestPath(Coordinate start, Coordinate end) {
Coordinate start = board.get(start.getRow()).get(start.getCol()); **eclipse ask me to change type of start to node**
Coordinate end = board.get(end.getRow()).get(end.getCol());
eclipse要求我改变开始类型以及结束节点
List<Coordinate> dispenser = new LinkedList<Coordinate>();
dispenser.add(start);
Map<Coordinate, Coordinate> predecessors = new HashMap<Coordinate, Coordinate>();
while (!dispenser.isEmpty()){
Coordinate current = dispenser.remove(0);
if(current == end){
break;
}//end of if
for(Coordinate n : getNeighbors(current)){
if(!predecessors.containsKey(n)){
predecessors.put(n, current);
dispenser.add(n);
return constructPath(predecessors, start, end);
}//end of while
List<Coordinate> path = new LinkedList<Coordinate>();
if (predecessors.containsKey(endNode)) {
Coordinate currNode = endNode;
while (currNode != startNode) {
path.add(0, currNode);
currNode = predecessors.get(currNode);
}//end of while
path.add(0, startNode);
}//end of if
return path;
}
List<Coordinate> shortest = new LinkedList<Coordinate>();
for (Node p: path){
shortest.add( ((coordinate) p).getCoordinate()); **eclipse says cannot cast from node to coordinate** I am not so good with java, I need help *
}
return shortest;
}
答案 0 :(得分:0)
Java编译器(通过Eclipse)告诉你确切的错误:你有一个Node
,但是你像Coordinate
那样对待它。问题不是&#34;为什么它是Node
?&#34;,但是&#34;为什么你认为它是Coordinate
?&#34;。
回答&#34;为什么它是Node
?&#34;无论如何...... board
是一个集合的集合。您的第一个board.get
会返回其中一个内部集合,其中包含Node
个对象。第二个.get
将返回Node
。所以要么停止在那里存储Node
,要么停止期待在那里找到Coordinate
。
你的两个问题仍然看起来很可疑:
public List<Coordinate> getShortestPath(Coordinate start, Coordinate end) {
Coordinate start = board.get(start.getRow()).get(start.getCol());
Coordinate end = board.get(end.getRow()).get(end.getCol());
// ...
}
getShortestPath
有两个名为Coordinate
和start
的{{1}}个对象,它首先要做的是用两个新的end
个对象替换它们,< em>还名为Coordinate
和start
。你得到的是什么问题?为什么你会比调用者更了解end
和start
应该是什么?