getShortestPath;我该如何修复此代码

时间:2016-03-26 04:30:07

标签: java

我一直在努力解决这个问题。 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;

 }

1 个答案:

答案 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有两个名为Coordinatestart的{​​{1}}个对象,它首先要做的是用两个新的end个对象替换它们,< em>还名为Coordinatestart。你得到的是什么问题?为什么你会比调用者更了解endstart应该是什么?