2017-09-23 1 views
2

여기에 문제가 있습니까? 목록, 링크드 목록과 같은 util 라이브러리로 인접 목록을 만들려고합니다. 인덱스 : :하지만 코드를 실행 한 후이 스레드에서 "주요"java.lang.IndexOutOfBoundsExceptionJava에서 인접성 목록을 만드는 동안 예외가 발생했습니다.

예외를 생성 0, 크기 : java.util.LinkedList.checkElementIndex (LinkedList.java:555)에서 0 문제

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 다른 클래스가 있습니다. 클래스 가장자리 { \t \t int v; \t \t public Edge (int v) { \t \t \t this.v = v; \t \t \t \t} –

+0

나는이 문제에 대해 좋은 생각을 가지고 있습니다. 아래에 자세한 답변을 추가했습니다. 문제를 해결하는 것이 유용하다고 판명되면 옆에있는 회색 체크 표시를 클릭하여 답을 수락 할 수 있습니까? – Assafs

답변

1

문제가 가장 가능성이 출력 방법에 연결되어 :

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

G의 노드 목록 수가 G의 각 노드 목록 길이와 동일하거나 더 작다고 가정합니다.

G 노드 목록이 i 길이보다 짧으면 get (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, Cool. 답을 받아 들일 수 있을까요? 회색 체크 표시를 클릭하면 녹색이됩니다. – Assafs

+1

물론. 고마워. –

관련 문제