变量可能尚未初始化(边加权图)
Variable might not have been initialized (edge weighted graph)
所以我正在尝试制作一个可以找到 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);
}
}
}
因为我使用的是边缘包,所以我使用的是包 class(add 方法的来源):
http://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/Bag.java.html
问题是每当我编译它时,第 32 行都会显示 "error: variable V might not have been initialized"。现在因为 MyEdgeWeightedGraph 方法调用包中的 add 方法 class,它不需要 return 声明那么为什么我一直收到这个错误?
在你的构造函数中,当你写
int E = in.readInt();
int V = in.readInt();
您正在创建名为 E
和 V
的局部变量,遮蔽 字段 E
和 V
。结果,在构造函数完成 运行 后,您声明 final
的 E
和 V
的值尚未初始化,因此出现错误。
要解决此问题,请删除类型并写入
E = in.readInt();
V = in.readInt();
这应该可以解决您的问题。
所以我正在尝试制作一个可以找到 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);
}
}
}
因为我使用的是边缘包,所以我使用的是包 class(add 方法的来源): http://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/Bag.java.html
问题是每当我编译它时,第 32 行都会显示 "error: variable V might not have been initialized"。现在因为 MyEdgeWeightedGraph 方法调用包中的 add 方法 class,它不需要 return 声明那么为什么我一直收到这个错误?
在你的构造函数中,当你写
int E = in.readInt();
int V = in.readInt();
您正在创建名为 E
和 V
的局部变量,遮蔽 字段 E
和 V
。结果,在构造函数完成 运行 后,您声明 final
的 E
和 V
的值尚未初始化,因此出现错误。
要解决此问题,请删除类型并写入
E = in.readInt();
V = in.readInt();
这应该可以解决您的问题。