我使用Dijkstras算法,我似乎无法弄清楚为什么我的构造函数不能正常使用我想做的事情。
特别是这一行:A.edges = new Edge [] {new Edge(B,35),new Edge(C,50)};
给我错误:"错误:类Edge中的构造函数Edge不能应用于给定类型;"
public static void main(String[]args){
//sets all the cities/nodes to a vertex
Vertex A = new Vertex("CityA");
Vertex B = new Vertex("CityB");
//distance from each city to their new cities
A.edges = new Edge[]{ new Edge(B, 35), new Edge(C, 50)};
}
public static void dijkstra(Vertex s){
s.shortestDist = 0;
PriorityQueue<Vertex> cityQueue = new PriorityQueue<Vertex>();
cityQueue.add(s);
while(!cityQueue.isEmpty()){
Vertex w = cityQueue.poll();
for (Edge x : w.edges){
Vertex v = x.city;
int price = x.price;
int priceOfTrip = w.shortestDist + price;
if(priceOfTrip < v.shortestDist){ //relaxes the edge that it's on
cityQueue.remove(v);
v.shortestDist = priceOfTrip;
v.prev = w;
cityQueue.add(v);
}
}
}
}
//Contructor
public static class Edge{
public static int price;
public static Vertex city;
public static void Edge(Vertex altCity, int altPrice){
city = altCity;
price = altPrice;
}
}
答案 0 :(得分:2)
这一行
public static void Edge(Vertex altCity, int altPrice){
不是构造函数;它是一个返回void
的静态方法。构造函数不是static
,并且它们不会返回任何内容。尝试
public Edge(Vertex altCity, int altPrice){
此外,您的Edge
班级成员变量也不应为static
:
public int price;
public Vertex city;
答案 1 :(得分:1)
这是一种方法语法:
public static void Edge(Vertex altCity, int altPrice){
这不是构造函数。你的构造函数应该是:
public Edge(Vertex altCity, int altPrice){
此外,您的字段是类变量,因此每次调用构造函数时,将使用所有对象的新值设置相同的变量,不确定这是否是您想要的。