2012-11-15 20 views
8

में एकाधिक मान लौटें मैंने जावा में एक फ़ंक्शन लिखा था और मैं चाहता हूं कि यह फ़ंक्शन एकाधिक मान वापस कर दे। सरणी और संरचना के उपयोग को छोड़कर, क्या कई मान वापस करने का कोई तरीका है?जावा

मेरे कोड:

String query40 = "SELECT Good_Name,Quantity,Price from Tbl1 where Good_ID="+x; 
Cursor c = db.rawQuery(query, null); 
if (c!= null && c.moveToFirst()) 
{ 
    GoodNameShow = c.getString(0); 
    QuantityShow = c.getLong(1); 
    GoodUnitPriceShow = c.getLong(2); 
    return GoodNameShow,QuantityShow ,GoodUnitPriceShow ; 
} 
+0

क्या मायने रखता है "ग्रहण" नहीं है लेकिन भाषा (जावा) है। –

+2

मुझे एहसास है कि आपका कोड छद्म-जावा है, लेकिन यह सुनिश्चित करें कि आप camelCase के साथ अपने चर नाम दें (उदा। 'GoodNameShow' या' goodUnitPriceShow')। –

उत्तर

29

जावा, जब आप एक समारोह चाहते हैं एक से अधिक मान वापस जाने के लिए है, तो आप

  • एक वस्तु में उन मूल्यों को एम्बेड चाहिए आप
  • वापसी या किसी वस्तु को बदल जो आपके फ़ंक्शन

आपके मामले में, आपको स्पष्ट रूप से एक क्लै को परिभाषित करने की आवश्यकता है एस एस Show जो खेतों name, quantity और price हो सकता है:

public class Show { 
    private String name; 
    private int price; 
    // add other fields, constructor and accessors 
} 

फिर

public Show test(){ 
     ... 
     return new Show(GoodNameShow,QuantityShow ,GoodUnitPriceShow) ; 
+1

@estiedi क्या आपका मतलब है कि 'Collection.sort' खराब शैली है?यदि आप उन लोगों द्वारा समझने योग्य बनाने की कोशिश करते हैं जो भाषा के सबसे बुनियादी तथ्यों को नहीं जानते हैं तो आप कुशल कोड नहीं बना सकते हैं। अगर कोई नहीं जानता कि प्राप्त वस्तु को किसी विधि द्वारा बदला जा सकता है, तो उसे पेशेवर टीम में शामिल होने से पहले सीखना चाहिए। –

+0

यह अभी भी खेदजनक है कि सीएलयू उदाहरण से भाषाएं नहीं सीखीं। सीएलयू का संबंधित एकाधिक असाइनमेंट सेमी-संदिग्ध उपयोग ('x, y = y, x') है, लेकिन एकाधिक रिटर्न मान ** बहुत ** उपयोगी (' x, y = function (params) ') है। एक रैपिंग ऑब्जेक्ट को वापस करने के लिए मजबूर करना (अक्सर 'साफ़ "घोषणाओं के अनुसार' कक्षा जोड़े ') के समान दंड है, बहुत सख्त कॉल के तहत जुर्माना है, और वापसी मूल्य रखने के लिए ऑब्जेक्ट पास करना कोई संकलक गारंटी नहीं है कि फ़ील्ड हैं भर ग्या। –

+0

@ tgm1024 आपको गो पर एक नज़र रखना चाहिए जहां बॉट एकाधिक मान लौटा रहा है और एकाधिक असाइनमेंट बहुत उपयोगी हैं;) –

1

मैं इस स्थिति के इस प्रकार से निपटने के लिए एक बहुत ही बुनियादी दृष्टिकोण विकसित किया है अपने समारोह बदल जाते हैं।

मैंने स्ट्रिंग्स में सेपरेटर का तर्क दिया है।

उदाहरण के लिए यदि आप एक ही समारोह में वापस जाने के लिए की जरूरत है 1. पूर्णांक मूल्य 2. डबल मूल्य 3. स्ट्रिंग मान

आप एक विभाजक स्ट्रिंग

इस्तेमाल कर सकते हैं उदाहरण के लिए " ,।, " इस प्रकार की स्ट्रिंग आम तौर पर कहीं भी दिखाई नहीं देगी।

आप इस विभाजक "< पूर्णांक मूल्य>,।, < डबल मूल्य>,।, < स्ट्रिंग मान>"

द्वारा अलग सभी मूल्यों से मिलकर एक स्ट्रिंग लौट सकते हैं और बराबर प्रकार जहां में परिवर्तित कर सकते हैं

रों - समारोह String.split (separtor) [सूचकांक]

विवरण के लिए निम्नलिखित कोड का संदर्भ लें उपयोग करके बुलाया गया है eparator ",।," पुराना =

public class TestMultipleReturns{ 

public static void main(String args[]){ 

    String result = getMultipleValues(); 
    int intval = Integer.parseInt(result.split(",.,")[0]); 
    double doubleval = Double.parseDouble(result.split(",.,")[1]);  
    String strval = result.split(",.,")[2]; 
} 

public static String getMultipleValues(){ 

    int intval = 231;//some int value  
    double doubleval = 3.14;//some double val 
    String strval = "hello";//some String val 

    return(intval+",.,"+doubleval+",.,"+strval); 

} 
} 

यह दृष्टिकोण एक शॉर्टकट के रूप में इस्तेमाल किया जा सकता है जब आप केवल समारोह के लिए कक्षाओं की संख्या में वृद्धि नहीं करना चाहती रिटर्न

यह करने के लिए जो दृष्टिकोण स्थिति के लिए स्थिति पर निर्भर करता लेना।

+1

हालांकि यह सुझाव कक्षाओं की संख्या में वृद्धि नहीं करता है, यह कई कारणों से एक भयानक दृष्टिकोण है: आप कई अनावश्यक वस्तुएं बनाते हैं ('स्ट्रिंगबिल्डर ',' स्ट्रिंग की) जो एक उपयोगिता वर्ग के एक उदाहरण से कहीं अधिक महंगे हैं। मूल्यों को पुनः प्राप्त करने का प्रयास अन्यायपूर्ण नहीं है, अनावश्यक कोड की आवश्यकता है और प्रदर्शन पर इसका उल्लेखनीय प्रभाव पड़ता है। जैसा कि आपने पहले ही देखा है, विभाजक स्ट्रिंग में प्रकट नहीं होना चाहिए और यह औपचारिक रूप से एक अन्यायपूर्ण धारणा है। –

+3

मैंने बस इतना ही कम किया कि लोग वास्तव में इस दृष्टिकोण का उपयोग नहीं करते हैं। प्रदर्शन और पठनीयता के लिए यह बुरा है, और कैली कभी नहीं जानता कि इस तरह की वापसी से क्या उम्मीद करनी है। – Panthro

+1

@still_learning - मुझे पता है कि प्रदर्शन के संबंध में यह दृष्टिकोण बहुत खराब है, लेकिन यह अभ्यास का एक हिस्सा था जिसे मैंने प्रोग्रामिंग के साथ शुरू किया था। मैं ज्यादातर जुलिआ और मैटलैब पर काम करता हूं जहां आप कई vals वापस कर सकते हैं, जैसे var1, var2 इत्यादि ... तो जब मैंने जावा के साथ शुरू किया तो मैंने अभ्यास करने के एक हिस्से के रूप में किया था। मैंने वास्तव में सोचा कि यह अच्छा काम करेगा लेकिन फिर मुझे लगा कि यह बहुत खराब प्रदर्शन देता है। –