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

时间:2016-03-02 22:45:22

标签: java graph compiler-errors final

所以我正在尝试创建一个找到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方法,所以它不需要返回声明,为什么我一直得到这个错误?

1 个答案:

答案 0 :(得分:0)

在构造函数中,当你写

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

您正在创建名为EV的局部变量 shadow 字段EV。因此,在构造函数完成运行后,您声明为E的{​​{1}}和V的值尚未初始化,因此错误。

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

final

这可以解决您的问题。