2012-11-15 71 views
8

我用Java編寫了一個函數,我希望這個函數返回多個值。除了使用數組和結構,有沒有辦法返回多個值?在Java中返回多個值

我的代碼:

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

重要的不是「Eclipse」而是語言(Java)。 –

+2

我意識到你的代碼是僞Java,但確保你用camelCase命名你的變量(例如'goodNameShow'或'goodUnitPriceShow')。 –

回答

29

在Java中,當你想要一個函數返回多個值,則必須

  • 在對象中嵌入這些值返回
  • 或更改對象這是傳遞給你的功能

在你的情況,你顯然需要定義一個cla SS Show這可能會對領域namequantityprice

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

語言並沒有從CLU的例子中學習,這仍然令人遺憾。 CLU的相關多重賦值是半可疑的('x,y = y,x'),但是多個返回值是**非常有用的('x,y = function(params)')。強制一個包裝對象被返回(通常通過類似'class Pair '的「乾淨」聲明)在很多嚴格的調用下受到懲罰,傳遞一個對象來保存返回值是非常麻煩的,沒有編譯器保證這些字段是填充。 – 2015-07-24 17:22:57

+0

@ tgm1024你應該看看Go在哪裏機器人返回多個值和多個分配是非常有用的;) –

1

我已經開發了一個非常基本的方法來處理這種情況。

我在字符串中使用了邏輯分隔符

例如,如果你需要在同一個函數返回 1 int值 2.雙重價值 3.字符串值

你可以使用一個分隔字符串

例如「 「,」這種字符串通常不會出現在任何地方。

你可以返回由該分離器 「< int值>,。,<雙值>,。,<字符串值>」

分隔的所有值的字符串並將其轉換爲等效類型,其中該函數已被調用通過使用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

雖然這個建議並不增加類的數量,但這是一個可怕的方法,原因很多:您創建多個不必要的對象( 'StringBuilder','String's),它比實用程序類的單個實例要昂貴得多。檢索值的努力是不合理的,需要不必要的代碼並對性能有顯着的影響。正如你已經注意到的那樣,分隔符不能出現在字符串中,這實際上是一個不合理的假設。 –

+3

我低估了,所以人們從來沒有真正使用過這種方法。這對性能和可讀性是不利的,而且數據庫永遠不知道從這樣的回報中期望什麼。 – Panthro

+1

@still_learning - 就性能而言,我知道這種方法非常糟糕,但這只是我開始編程時所做的練習的一部分。 我主要在julia和matlab上工作,在那裏你可以返回多個vals,比如返回var1,var2等等......所以當我用JAVA開始的時候,我剛剛成爲練習的一部分。我實際上認爲它會工作得很好,但後來我覺得它表現非常糟糕。 –