变量可能尚未初始化(边加权图)

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();

您正在创建名为 EV 的局部变量,遮蔽 字段 EV。结果,在构造函数完成 运行 后,您声明 finalEV 的值尚未初始化,因此出现错误。

要解决此问题,请删除类型并写入

    E = in.readInt();
    V = in.readInt();

这应该可以解决您的问题。