所以我正在尝试创建一个找到MST的程序。要构建图形,我正在使用一袋边缘,我正在使用此代码从文件中读取图形:
import edu.princeton.cs.algs4.*;
class MyEdgeWeightedGraph {
private final int V;
private final int E;
private Bag<MyEdge> edges;
public int V() {
return V;
}
public int E() {
return E;
}
public Iterable<MyEdge> edges() {
return edges;
}
public MyEdgeWeightedGraph(In in) {
int E = in.readInt();
int V = in.readInt();
if (E < 0) {
throw new IllegalArgumentException("Number of edges must be nonnegative");
}
for (int i = 0; i < E; i++){
int v = in.readInt();
int w = in.readInt();
long weight = in.readLong();
MyEdge e = new MyEdge(v, w, weight);
edges.add(e);
}
}
}
因为我正在使用一袋边缘,所以我正在使用bag类(这是add方法的来源): http://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/Bag.java.html
问题在于,无论何时我编译它,它都会为第32行说“错误:变量V可能没有被初始化”。现在因为MyEdgeWeightedGraph方法调用了包类中的add方法,所以它不需要返回声明,为什么我一直得到这个错误?
答案 0 :(得分:0)
在构造函数中,当你写
时 int E = in.readInt();
int V = in.readInt();
您正在创建名为E
和V
的局部变量 shadow 字段E
和V
。因此,在构造函数完成运行后,您声明为E
的{{1}}和V
的值尚未初始化,因此错误。
要解决此问题,请删除类型并写入
final
这可以解决您的问题。