2013-11-25 7 views
10

Also muss ich so in der Eingabe von Kanten eines zweiteiligen Graphen nehmen:Wie kann ich ein Array von verknüpften Listen in Java erstellen?

6 
1 3 
1 2 
1 5 
2 7 
2 4 
2 9 

Die erste Zahl die Anzahl der Kanten ist. Danach werden die Kanten aufgelistet. Sehen Sie, wie zum Beispiel Knoten 1 mehrere verschiedene Kanten hat und ich verfolgen möchte, was mit 1 verbunden ist, dachte ich, dass jeder Scheitelpunkt des Graphen eine Art Liste von Scheitelpunkten haben würde, mit denen er zu versuchen versucht Erstellen Sie eine Reihe von verknüpften Listen, aber ich bin mir nicht sicher, wie ich das machen würde. Ich versuchte

LinkedList<Integer>[] vertex = new LinkedList[5]; 
int i = 0, m = 6; 
while(i!=m){ 
    int temp = sc.nextInt(); 
    int temp2 = sc.nextInt(); 
    vertex[temp].add(temp2); 
    i++; 
} 

Aber ich bekomme eine Nullpointerexzeption an der Add-Linie.

+4

Sie haben die Elemente im Array, nur das Array selbst nicht initialisiert. –

+0

Haben Sie an Klassen wie "Vertex", "Edge" gedacht? Und haben Sie eine 'Liste ' in einer anderen Klasse namens 'Graph'? –

+0

Arrays verwenden auch 0-basierte Indizes, was bedeutet, dass ein Array der Größe 5 die Indizes "0 ... 4" hat. –

Antwort

17
LinkedList<Integer>[] vertex = new LinkedList[5]; 
int i = 0, m = 6; 
while(i!=m){ 
    int temp = sc.nextInt(); 
    int temp2 = sc.nextInt(); 

    // Make sure the list is initialized before adding to it 
    if (vertex[temp] == null) { 
    vertex[temp] = new LinkedList<Integer>(); 
    } 

    vertex[temp].add(temp2); 
    i++; 
} 
+0

LinkedList [] Vertex = new LinkedList [5]; Warum erhalte ich die folgende Warnung, wenn ich das obige mache? Wie kann man das mildern? Typ Sicherheit: Die Expression von Typ LinkedList [] Bedürfnisse ungeprüft Umstellung auf LinkedList [] – jaamit

+0

@jaamit @SuppressWarnings ("ungeprüft") LinkedList [] Vertex = new LinkedList [5] entsprechen; hat für mich gearbeitet. –

+1

@ShubhamMittal @SuppressWarnings ("unchecked") dies wird die Warnung unterdrücken. Ich bin mehr daran interessiert zu wissen, warum die Warnung an erster Stelle kam. – jaamit

2
//initialize array 
LinkedList<Integer>[] vertex = new LinkedList[5]; 
//initialize array elements(objects of LinkedList) 
for (int j=0; j<5; j++) 
    vertex[i]=new LinkedList<Integer>(); 

int i = 0, m = 6; 
while(i!=m){ 
    int temp = sc.nextInt(); 
    int temp2 = sc.nextInt(); 
    vertex[temp].add(temp2); 
    i++; 
} 

Normalerweise Arrays sind in Java ermutigt. Alternativ können Sie dies verwenden:

//initialize array 
List<LinkedList<Integer>> vertex = new ArrayList<LinkedList<Integer>>(); 
//initialize arraylist elements(objects of LinkedList) 
for (int j=0; j<5; j++) 
    vertex.add(new LinkedList<Integer>()); 
Verwandte Themen