2016-08-09 9 views
6

के साथ एक लिंक्डलिस्ट में किसी विशिष्ट स्थान का संदर्भ लौटाएं मेरे पास एक पोर्टफोलियो क्लास है जिसमें निवेश वर्ग की लिंकलिस्ट भी है (उदाहरण - Google निवेश का एक उदाहरण है), प्रत्येक निवेश का व्यापार इतिहास होता है (दूसरा लिंक सूची) प्रत्येक व्यापार के लिए डेटा के साथ।जावा - सूची इटेरेटर

जब उपयोगकर्ता एक व्यापार करना चाहता है (5K के लिए Google स्टॉक खरीदें) मुझे यह पता लगाना होगा कि निवेश (Google में) निवेश में मौजूद है या नहीं। यदि ऐसा नहीं होता है - नया निवेश जोड़ें (और अपने व्यापार इतिहास के लिए व्यापार जोड़ें), यदि ऐसा होता है - तो बस Google के व्यापार हिस्ट्री लिंक्डलिस्ट में एक और लिंक जोड़ें।

समस्या - मुझे निवेश सूची से Google (निवेश उदाहरण) के संदर्भ को वापस करने के लिए निवेश विधि की आवश्यकता है ताकि मैं अपने व्यापार इतिहास को अपडेट कर सकूं। विधि निवेश सूची में किसी स्थान के संदर्भ के बजाय एक सूची देता है (निवेश होना चाहिए कक्षा)। मुझे निवेश निवेश को कैसे सही करना चाहिए? (पाया = आईटीईआर गलत है)

public class Portfolio { 


private LinkedList<Investment> investmentsList; 

public Portfolio() { 
    investmentsList = new LinkedList<Investment>(); 
} 

public void addInvestment(String symbol, double money){ 

    Investment invest = findInvestment(symbol); 
    if (invest == null) { 
     System.out.println("symbol does not exist"); 
     getInvestmentsList().add(new Investment(symbol,money)); 
     System.out.println("New invetment has been added to your portfolio - " +symbol); 
    } else { 
     invest.addTrade(symbol,money); 
     System.out.println("A new trade has been added to the current investment - " + symbol); 

    } 
} 

public Investment findInvestment(String symbol){ 

    Investment found = null; 
    ListIterator<Investment> iter = investmentsList.listIterator(); 


    while (iter.hasNext()) { 

     if (iter.next().getSymbol().equals(symbol)) { 
      found = iter; 
      return found; 
      System.out.println("Found the symbol"); 
     } 
    } 

    return found; 
} 
+1

वैकल्पिक समाधान के रूप में, आप एक सूची के बजाय एक लिंक्ड हैशैप का उपयोग कर सकते हैं, और प्रतीक को "कुंजी" के रूप में उपयोग कर सकते हैं, तो आपको वास्तव में findInvenstment विधि लिखने की आवश्यकता नहीं होगी। .contains(), और .get() आपको जो भी चाहिए उसे प्रदान करेगा। – slambeth

+0

हाँ, यह एक अच्छा विकल्प है, धन्यवाद। – Niminim

उत्तर

2

आप पहले से ही अपने कोड में अपने प्रश्न का उत्तर यह प्रयोग करें!

if (iter.next().getSymbol().equals(symbol)) { 
     found = iter; 

देखें?

आप iter.next() को कॉल कर रहे हैं जो आपको वही देता है जो आप खोज रहे हैं! तो, आप सरल की तरह पाश के भीतर अपने कोड rework करने के लिए है:

Investment currentInvestment = iter.next(); 
if (currentInvestment.get...) { 
    found = currentInvestment; 
    println... 
    return found; 
} 

और भविष्य के लिए: कृपया कक्षाएं आप के साथ काम कर रहे हैं की जावाडोक पढ़ें। वे आम तौर पर आपको जो कुछ जानने की जरूरत है उसे बताते हैं! संकेत संख्या 2: रिटर्न स्टेटमेंट के बाद println होने में कोई बात नहीं है।

और मुझे लगता है कि कुछ अनुभवी लोग आपके कोड की समीक्षा करते हैं। यह छोटी गाड़ी नहीं है; लेकिन कुछ चीजें हैं जिन्हें बेहतर किया जा सकता है; मुद्रा के लिए डबल के उपयोग की तरह (जो हमेशा भयानक विचार है); या तथ्य यह है कि एक निवेश का आपका "मॉडल" ... अपने "प्रतीक" को दर्शाते हुए एक स्ट्रिंग पर उबालता है। यह बहुत ही कम "स्तर" है।

+0

'अगली()' पर दूसरी कॉल एक अलग आइटम प्रदान करेगी। –

+0

@MuratK। मेरी गलती; मैं उस हिस्से को याद किया। सर उठाने के लिए धन्यवाद; मैंने एम जवाब अपडेट किया! – GhostCat

+0

@GostCatDatat में स्विच किए गए addTrade विधि में सिर्फ "पहला ड्राफ्ट" है।निवेश वर्ग में प्रतीक, शेयरों की संख्या, औसत मूल्य और व्यापार इतिहास है, यह एक स्ट्रिंग के रूप में बहुत आसान नहीं है। धन्यवाद!! – Niminim

2

की तरह इस

while (iter.hasNext()) { 

    if ((found = iter.next()).getSymbol().equals(symbol)) { 
     System.out.println("Found the symbol"); 
     return found; 

    } 
} 
+0

डाउनवोट समझाओ। –

3

बस एक Investment पकड़ - या जावा में 8 Optional<Investment>

लिंक्ड सूची के बजाय

:

private Map<String, Investment> investmentsBySymbol; 

public Investment findInvestment(String symbol){ 
    Investment found = investmentsList.get(symbol); 
    return found; 
} 

इसके अलावा BigDecimal डबल के रूप में

new BigDecimal("3.10"); 

एक सटीक है की तुलना में एक बेहतर विकल्प है 2, और युगल हमेशा अपरिचित होते हैं।

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