此行的多个标记:令牌上的语法错误,错位的构造(s)

时间:2015-05-24 02:35:58

标签: java

我有代码:

public class DijkstraGo {

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.PriorityQueue;

    class Vertex implements Comparable<Vertex> {
        public final String name;
        public Edge[] adjacencies;
        public double minDistance = Double.POSITIVE_INFINITY;
        public Vertex previous;

        public Vertex(String argName) {
            name = argName;
        }

        public String toString() {
            return name;
        }

        public int compareTo(Vertex other) {
            return Double.compare(minDistance, other.minDistance);
        }
    }

    class Edge {
        public final Vertex target;
        public final double weight;

        public Edge(Vertex argTarget, double argWeight) {
            target = argTarget;
            weight = argWeight;
        }
    }

    class Dijkstra {
        public static void computePaths(Vertex source) {
            source.minDistance = 0.;
            PriorityQueue<Vertex> vertexQueue = new PriorityQueue<Vertex>();
            vertexQueue.add(source);

            while (!vertexQueue.isEmpty()) {
                Vertex u = vertexQueue.poll();

                // Visit each edge exiting u
                for (Edge e : u.adjacencies) {
                    Vertex v = e.target;
                    double weight = e.weight;
                    double distanceThroughU = u.minDistance + weight;
                    if (distanceThroughU < v.minDistance) {
                        vertexQueue.remove(v);
                        v.minDistance = distanceThroughU;
                        v.previous = u;
                        vertexQueue.add(v);
                    }

                }
            }
        }

        public static List<Vertex> getShortestPathTo(Vertex target) {
            List<Vertex> path = new ArrayList<Vertex>();
            for (Vertex vertex = target; vertex != null; vertex =
                vertex.previous)
                path.add(vertex);
            Collections.reverse(path);
            return path;
        }

        public static void main(String[] args) {
            Vertex v0 = new Vertex("Koordinat 1");
            Vertex v1 = new Vertex("Koordinat 2");
            Vertex v2 = new Vertex("Koordinat 3");
            Vertex v3 = new Vertex("Koordinat 4");
            Vertex v4 = new Vertex("Koordinat 5");

            v0.adjacencies = new Edge[] {
                new Edge(v1, 5),
                new Edge(v2, 10),
                new Edge(v3, 8)
            };
            v1.adjacencies = new Edge[] {
                new Edge(v0, 5),
                new Edge(v2, 3),
                new Edge(v4, 7)
            };
            v2.adjacencies = new Edge[] {
                new Edge(v0, 10),
                new Edge(v1, 3)
            };
            v3.adjacencies = new Edge[] {
                new Edge(v0, 8),
                new Edge(v4, 2)
            };
            v4.adjacencies = new Edge[] {
                new Edge(v1, 7),
                new Edge(v3, 2)
            };
            Vertex[] vertices = {v0, v1, v2, v3, v4};
            computePaths(v0);
            for (Vertex v : vertices) {
                System.out.println("Distance to " + v + ": " + v.minDistance);
                List<Vertex> path = getShortestPathTo(v);
                System.out.println("Path: " + path);
            }
        }
    }

但是Eclipse说:

  

此行的多个标记
   - 令牌上的语法错误,错位的构造())    - 令牌上的语法错误,错位的构造

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

从代码顶部删除public class DijkstraGo,它会正常工作。

这是输出:

Distance to Koordinat 1: 0.0
Path: [Koordinat 1]
Distance to Koordinat 2: 5.0
Path: [Koordinat 1, Koordinat 2]
Distance to Koordinat 3: 8.0
Path: [Koordinat 1, Koordinat 2, Koordinat 3]
Distance to Koordinat 4: 8.0
Path: [Koordinat 1, Koordinat 4]
Distance to Koordinat 5: 10.0
Path: [Koordinat 1, Koordinat 4, Koordinat 5]

Online Version of your code.