如何使getWeight()返回此边缘的权重

时间:2017-05-09 20:39:43

标签: java graph

@Override
public String toString(){
    String result="";
    for(int i=0;i<G.length;i++)
        result+=i+"=>"+G[i]+"\n";
    return result;
}
}

public class GraphEx
{
  public static void main(String[] args) 
  {
    Graph g=new Graph(10);
    g.addEdge(1,2,38);
    g.addEdge(1,5 ,19);
    g.addEdge(1,3 ,35);
    g.addEdge(1,4 ,11);
    g.addEdge(4,3,27);
    g.addEdge(3,6,13);
    g.addEdge(3,5,28);
    g.addEdge(5,6,26);



    System.out.println(g);
    g.getWeight(6,3);
}
}

这部分正上方^^^^。我试图让代码返回与已经输入的两个数字相关联的正确数字。例如,g.getWeight(6,3)应返回13,因为这是图中这两个数字的权重。

{{1}}

当前代码所给出的错误是&#34;变量w可能尚未初始化&#34;

2 个答案:

答案 0 :(得分:1)

  

变量w可能尚未初始化

这是因为Definite assignment

  

每个局部变量(§14.4)和每个空白的最终字段(§4.12.4,§8.3.1.2)在对其值进行任何访问时都必须具有明确赋值。

与成员变量不同,您必须在使用其值之前分配局部变量。你可以简单地分配一个值;但这不会做你需要的事情:

int w = 0;  // Or -1, or Integer.MAX_VALUE, or something.

要实现此方法,您必须搜索G[u]的边缘,查找目标为v的边缘,并返回其权重。

例如:

for (Edge e : G[u]) {
  if (e.v == v) { return e.w }
}
throw new NoSuchElementException(); // Or return a default value.

请注意,混合数组和泛型不是一个好主意:

List<Edge> G[];

最好使用完整的泛型解决方案:

Map<Integer, List<Edge>> G = new HashMap<>();

答案 1 :(得分:1)

代码

public int getWeight(int u, int v)
{
    int w; // There's no need, delete this
    return w;
}

您正在创建一个新变量并且没有初始化它。 你必须在G []中搜索右边缘。