2011-11-30 21 views
6

तो मैं इतनाखाली सूची में जोड़ने से

List<Node> nodes = null; 

की तरह एक खाली सूची है और उसके बाद मैं एक अशक्त सूची में

try { 
     File file = new File("test.txt"); 
     Scanner scanner = new Scanner(file); 
     while (true){ 

      String first= scanner.next(); 
      if (first.equals("-1")){ 
       break; 
      } 
      Node node1= new Node(first, first); 
      if (nodes==null){ 
       nodes.add(node1); 
      } 
      if (nodes!=null){ 
       if(nodes.contains(node1)){ 
        nodes.add(node1); 

       } 
      } 

तो स्पष्ट रूप से कर रही है .contains में "नोड" रों जोड़ना चाहते हैं मुझे एक अपवाद त्रुटि देता है, लेकिन

if (nodes==null){ 
    nodes.add(node1); 
} 

मुझे एक शून्य सूचक त्रुटि भी देता है? ऐसा लगता है जैसे खाली सूचियां अपरिवर्तनीय हैं। मैं अभी भी एक सूची संरचना कैसे रख सकता हूं और अभी भी इसे खाली से बना सकता हूं?

उत्तर

1

आपको सूची में स्मृति आवंटित करना होगा: nodes = new ArrayList<Node>(); नोड जोड़ने से पहले। आप एक नोड सूची में नोड जोड़ने की कोशिश कर रहे हैं, यानी कुछ भी नोड जोड़ने के लिए।

+2

आप 'सूची' इंटरफ़ेस को तुरंत चालू नहीं कर सकते हैं :) – Bozho

+0

ओह, 'ऐरेलिस्ट' या इसी तरह का होना चाहिए था। मैं अपना जवाब संपादित करूंगा। उसके लिए चीयर्स। –

8
List<Node> nodes = null; 

यह एक खाली सूची नहीं है, यह एक सूची संदर्भ है जो शून्य के लिए iniitalized है। आप इसके बजाय चाहते हैं:

List<Node> nodes = new LinkedList<Node>(); 

या इसी तरह के। यह आपको एक खाली सूची देता है।

संपादित करें: प्रश्न के परिवर्तन के बाद, इस तर्क पूरी तरह से में गड़बड़ है:

Node node1= new Node(first, first); 
if (nodes==null){ 
    nodes.add(node1); 
} 
if (nodes!=null){ 
    if(nodes.contains(node1)){ 
     nodes.add(node1); 

    } 
} 

क्या तुम यहाँ कह रहे हैं कि अगर नोड्स == बातिल (जो कि अभी है नहीं), तो करने की कोशिश है सूची में नोड जोड़ें। यदि यह शून्य नहीं है, और नोड 1 पहले से ही सूची में है (जो यह नहीं है), तो इसे सूची में जोड़ें। आप उपरोक्त पंक्तियों को प्रतिस्थापित कर सकते हैं:

if (!nodes.contains(node1)) { 
    nodes.add(node1); 
} 

जो कहता है कि नोड सूची में मौजूद नहीं है, तो इसे जोड़ें।

1

आप सूची पहले

nodes = new ArrayList<Node>(); 

उदाहरण के लिए initalize की जरूरत है:

if (nodes==null){ 
    nodes = new ArrayList<Node>(); 
    nodes.add(node1); 
} 

लेकिन यह वास्तव में एक initialzed नहीं (शून्य) सूची के बजाय एक खाली सूची के लिए बेहतर है ।

तो के बजाय: List<Node> nodes = null;List<Node> nodes = new ArrayList<Node>(); तो आप पूरा if को हटा दें और हमेशा nodes.add(node1);, कोई फर्क नहीं पड़ता का उपयोग करता है, तो यह पहली या दूसरी तत्व है सकते हैं।

0
nodes = new ArrayList<Node>(); 

इसे एक नई वस्तु (खाली) में शुरू करने में मदद करनी चाहिए।

+0

मैंने अभी भी वही गलती की है, आप 'सूची' को चालू नहीं कर सकते हैं, इसे निश्चित रूप से 'ArrayList' या' LinkedList' आदि होना चाहिए –

+0

बेशक! इसे इंगित करने के लिए धन्यवाद। अभी भी सी # मोड में मुझे लगता है :) – abhinav

+0

हाहा कोई चिंता नहीं। मुझे एक टिप्पणी मिली जो मुझे मेरे जवाब के साथ एक ही बात बता रही है। मैं सी ++ मोड में हूं। –

1

यदि nodesnull है, तो आप इसके साथ कुछ भी नहीं कर सकते हैं। इसे new ArrayList<Node>() पर शुरू करें। यह अब एक खाली सूची है।

0

इस nodes के रूप में एक निश्चित नल पॉइंटर एक्सेप्शन है रिक्त है

आप मतलब था

if (nodes!=null){ 
    nodes.add(node1); 
} 

भी प्रारंभ सूची

nodes = new ArrayList() 
1

इसका कारण यह है कि आप अपने उद्देश्य "नोड्स instantiated नहीं किया है "।

निम्नलिखित पंक्ति जोड़ दें और यह काम करना चाहिए:

if (nodes==null){ 
     nodes = new ArrayList<Node>(); 
     nodes.add(node1); 
    } 

यह भी ध्यान रखें कि आप सूची वस्तुओं का दृष्टांत नहीं कर सकते। तो तुम ArrayList/LinkedList आदि

0

आप node की तरह कुछ का उपयोग कर सकते है कि यह एक null pointer exception प्राप्त करने के लिए सबसे आम प्रोग्रामिंग गलती है null तो यह सभी ने कहा की तरह त्रुटि है है ...। यह बेहतर है कि आप अपने ग्रहण के साथ findbug प्लगइन का उपयोग करें; यह आपको इस तरह की त्रुटि बनाने की अनुमति नहीं देगा। समस्या का पता लगाने के लिए भी आपके लिए आसान होगा।

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