2012-11-15 5 views
8

私はJavaで関数を記述しましたが、この関数は複数の値を返すようにしたいと思います。配列と構造の使用を除いて、複数の値を返す方法はありますか?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

、あなたは関数が複数の値を返すようにしたいとき、あなたは

  • はあなたが
  • を返すか、オブジェクトを変更するオブジェクトにそれらの値を埋め込む必要がありますそれはあなたの関数に渡されます

あなたの場合、明示的にclaを定義する必要がありますフィールドnamequantityprice持つことができSS Show

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 'に似た "クリーンな"宣言によってしばしば返される)ラッピングオブジェクトを強制的に強制することは、非常に多くの緊密な呼び出しの下で不利益を被り、返り値を保持するためにオブジェクトを渡すことは、いっぱい。 –

+0

@ tgm1024あなたは複数の値を返すボットと複数の割り当てが非常に便利なGoを見てください) –

1

にあなたの関数を変更します。

私はセパレータのロジックをStringsで使用しました。同じ機能で例えば

あなたが返す必要があれば 1. int型の値 2.ダブル値 3.文字列値

あなたは「例えば区切り文字列

を使用することができます、 "、この種の文字列は一般にどこにも現れません。

あなたはこの区切り "< int値>、。、< double値>、。、<文字列値>"

で区切られたすべての値からなる文字列を返すと同等のタイプの場所に変換することができ

S - 関数は、[インデックス]

は、説明のために以下のコードを参照してくださいの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

私はちょうどdownvotedので、人々は実際にこのアプローチを使用することはありません。パフォーマンスと可読性に悪影響を及ぼし、そのようなリターンから何を期待するかは決して決してわかりません。 – Panthro

+1

@still_learning - このアプローチはパフォーマンスに関しては非常に悪いことを知っていますが、それはプログラミングを始めたときにやったことのほんの一部です。 私は主にjuliaとmatlabに取り組んでいました。var1、var2などを返すような複数の値を返すことができます。私がJAVAで始めたとき、私はちょうど練習の一部としてやっていました。実際にはうまくいくと思っていましたが、その後はパフォーマンスが非常に悪いと感じました。 –