如何使getWeight()返回此边的权重 import java.util.*; 类图{ 阶级边缘{ int v,w; 公共边缘(内部v、内部w){ 这个.v=v;这个.w=w; } @凌驾 公共字符串toString(){ 返回“(“+v+”、“+w+”)”; } } 清单G[]; 公共图(int n){ G=新链接列表[n]; 对于(int i=0;i

如何使getWeight()返回此边的权重 import java.util.*; 类图{ 阶级边缘{ int v,w; 公共边缘(内部v、内部w){ 这个.v=v;这个.w=w; } @凌驾 公共字符串toString(){ 返回“(“+v+”、“+w+”)”; } } 清单G[]; 公共图(int n){ G=新链接列表[n]; 对于(int i=0;i,java,graph,Java,Graph,变量w可能尚未初始化 这是因为 每个局部变量(§14.4)和每个空白最终字段(§4.12.4,§8.3.1.2)在访问其值时必须具有明确的赋值 与成员变量不同,在使用局部变量的值之前,必须先分配它们。您可以简单地分配一个值;但这还不能满足您的需要: @Override public String toString(){ String result=""; for(int i=0;i<G.length;i++) result+=i+"=>"+G[i]+"

变量w可能尚未初始化

这是因为

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

与成员变量不同,在使用局部变量的值之前,必须先分配它们。您可以简单地分配一个值;但这还不能满足您的需要:

@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[u]
的边缘,查找目标为
v
的边缘,并返回其权重

例如:

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

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

for (Edge e : G[u]) {
  if (e.v == v) { return e.w }
}
throw new NoSuchElementException(); // Or return a default value.
List G[];
最好使用完整的泛型解决方案:

List<Edge> G[];
mapg=newhashmap();
变量w可能尚未初始化

这是因为

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

与成员变量不同,在使用局部变量的值之前,必须先分配它们。您可以简单地分配一个值;但这还不能满足您的需要:

@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[u]
的边缘,查找目标为
v
的边缘,并返回其权重

例如:

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

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

for (Edge e : G[u]) {
  if (e.v == v) { return e.w }
}
throw new NoSuchElementException(); // Or return a default value.
List G[];
最好使用完整的泛型解决方案:

List<Edge> G[];
mapg=newhashmap();
在您的代码中

Map<Integer, List<Edge>> G = new HashMap<>();
您正在创建一个新变量,但没有初始化它。 您必须在代码的右边缘G[]中搜索。

Map<Integer, List<Edge>> G = new HashMap<>();
您正在创建一个新变量,但没有初始化它。
您必须在G[]中搜索,右边缘。

你不能返回未初始化的变量,只需给它一个默认值。类似
int w=0;
谢谢!我不敢相信我没有看到这一点。你不能返回未初始化的变量,只需给它一个默认值。类似
int w=0;
谢谢!我不敢相信我没有看到这一点欢迎使用SO。如果您还对变量范围发表了评论,并且为什么应删除
int w
,可能会对OP有所帮助。欢迎使用SO。如果您还对变量范围发表了评论,并且为什么应删除
int w
,可能会对OP有所帮助。