9

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 ;
}
4

3 に答える 3

30

Javaでは、関数が複数の値を返すようにする場合は、

  • 返すオブジェクトにこれらの値を埋め込みます
  • または、関数に渡されるオブジェクトを変更します

あなたの場合、あなたは明らかにShowフィールドを持つことができるクラスを定義する必要がありますnamequantityそして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) ;
于 2012-11-15T08:04:22.033 に答える
0

私が数回遭遇した(Javaライブラリ自体でも)迅速で醜いアプローチの1つは、値をとして返し、Object[]キャストを使用して解凍することです。例えば

public Object[] myfunc() {
  String name = "...";
  Integer quantity = 5
  Float price = 3.14
  return new Object[] { name, quantity, price };

次に、次のように使用されます。

Object[] output = myfunc();
String name = (String) output[0];
Integer quantity = (Integer) output[1];
Float price = (Float) price[2];

専用オブジェクトに値を埋め込む方がはるかにクリーンですが、とにかくここに残しておきます。

于 2021-09-27T14:24:15.047 に答える
-1

私はこのような状況に対処するための非常に基本的なアプローチを開発しました。

文字列でセパレータのロジックを使用しました。

たとえば、同じ関数に戻る必要がある場合1.int値2.double値3.文字列値

区切り文字列を使用できます

たとえば、「、。、」この種の文字列は通常、どこにも表示されません。

この区切り文字で区切られたすべての値で構成される文字列を返すことができます "<intvalue>、。、<double value>、。、<Stringvalue>"

String.split(separtor)[index]を使用して関数が呼び出された場合は、同等のタイプに変換し ます。

説明については、次のコードを参照してください-

セパレーターは="、。、"を使用しました

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);

 }
}

このアプローチは、関数の戻り値のみのクラス数を増やしたくない場合のショートカットとして使用できます。

どのアプローチを取るかは状況によって異なります。

于 2014-02-13T11:27:19.857 に答える