2013-11-25 7 views
10

तो मैं इस तरह एक द्विपक्षीय ग्राफ के किनारों के इनपुट में लेने की जरूरत:मैं जावा में लिंक्ड सूचियों की एक सरणी कैसे बना सकता हूं?

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

पहले नंबर किनारों की संख्या है। उसके किनारों के बाद सूचीबद्ध हैं। देखें कि उदाहरण के लिए वर्टेक्स 1 में कई अलग-अलग किनारों हैं और मैं ट्रैक करना चाहता हूं कि 1 किससे जुड़ा हुआ है, मैं सोच रहा था कि ग्राफ के प्रत्येक चरम पर कुछ प्रकार की शीर्षकों की सूची होगी जो इससे जुड़ा हुआ है जिससे मुझे लिंक्ड सूचियों की एक सरणी बनाएं लेकिन मुझे यकीन नहीं है कि मैं यह कैसे करूंगा। मैंने

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++; 
} 

लेकिन मुझे ऐड लाइन पर एक nullpointerexception मिलता है।

+4

आपने सरणी में तत्वों को प्रारंभ नहीं किया है, केवल सरणी ही। –

+0

क्या आप कक्षाएं बनाने के बारे में सोचते थे - 'Vertex',' Edge'? और 'Graph' नामक किसी अन्य वर्ग में 'सूची ' है? –

+0

इसके अलावा, सरणी 0-आधारित इंडेक्स का उपयोग करती हैं जिसका अर्थ है कि आकार 5 की एक सरणी में सूचकांक '0 ... 4' है। –

उत्तर

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

लिंक्डलिस्ट [] vertex = new LinkedList [5]; जब मैं ऊपर करता हूं तो मुझे निम्न चेतावनी क्यों मिलती है? इसे कैसे कम करें? प्रकार की सुरक्षा: प्रकार की अभिव्यक्ति LinkedList [] जरूरतों अनियंत्रित रूपांतरण LinkedList [] – jaamit

+0

@jaamit @SuppressWarnings ("अनियंत्रित") LinkedList के अनुरूप [] शिखर = नए LinkedList [5]; मेरे लिए काम किया –

+1

@ शुभम मित्तल @ सुपरप्रेस चेतावनी ("अनचेक") यह चेतावनी को दबाएगा। मुझे यह जानने में अधिक दिलचस्पी है कि चेतावनी पहली जगह क्यों आई थी। – 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++; 
} 

आम तौर पर सरणी जावा में प्रोत्साहित नहीं किया जाता। वैकल्पिक रूप से आप इसका उपयोग कर सकते हैं:

//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>()); 
संबंधित मुद्दे

 संबंधित मुद्दे