使用java创建邻接列表时出现异常的异常

问题描述:

这里有什么问题? 我想与util列表,链表列表,使用utillist库邻接列表。但在运行代码后,它产生使用java创建邻接列表时出现异常的异常

异常线程 “main” java.lang.IndexOutOfBoundsException:指数:0,大小:0 在java.util.LinkedList.checkElementIndex(LinkedList.java:555)问题

import java.util.*; 
class GraphMain{ 

    List<Edge> G[]; 
    public GraphMain(int n) { 
     G=new LinkedList[n]; 
     for(int i=0;i<G.length;i++) 
      G[i]=new LinkedList<Edge>(); 
    } 
    boolean isConnected(int u,int v) { 
     for(Edge i: G[u]) 
      if(i.v==v) return true; 
     return false; 
    } 
    void addEdge(int u,int v) { 
     G[u].add(new Edge(v)); 
    } 

    void printGraph() { 
     for(int i=0;i<G.length;i++) 
     System.out.println(i+"=>"+G[i].get(i)+"\n"); 
    } 
} 

我的测试类是:

public class Graph { 
    public static void main(String[] args) { 
     GraphMain g=new GraphMain(10); 
     g.addEdge(1, 2); 
     g.addEdge(2, 5); 
     g.addEdge(2, 5); 
     g.addEdge(8, 3); 

     g.printGraph(); 
    } 
} 
+1

唯一的例外似乎是不完整的。你可否请其他人 - 如果有的话。 – blafasel

+0

@blafasel我只有另一个类: class Edge { \t \t int v; \t \t public Edge(int v){ \t \t \t this.v = v; \t \t} \t \t} –

+0

我对您的问题一个好的预感 - 我加了以下详细的解答。如果证明解决问题很有用,请点击旁边的灰色复选标记接受答案,使其变成绿色? – Assafs

你的问题很可能连接到该打印方法:

void printGraph() 
{ 
    for(int i=0;i<G.length;i++) 
    System.out.println(i+"=>"+G[i].get(i)+"\n"); 
} 

在该方法中你假设节点列表的G中的数量为比各节点列表的在G的长度相同或更小的

如果G [i]于节点列表会比我长度更短,则得到(i)会导致索引超出范围将被抛出。

与此处理的另一个打印选项可能是:

void printGraph() 
{ 
    for(int i=0;i<G.length;i++) { 
     for (Node node: G[i]) { 
      System.out.println(i+"=>"+node+"\n"); 
     } 
    } 
} 
+0

太棒了。 它解决了我的问题。 –

+0

@AmitBiswas,酷。你能接受答案吗?只需点击灰色复选标记,使其变绿。 – Assafs

+1

当然。非常感谢 –