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 库本身中)的一种快速而丑陋的方法是返回你的值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. String 值

您可以使用分隔符字符串

例如“,.”这种字符串一般不会出现在任何地方。

您可以返回一个由此分隔符分隔的所有值组成的字符串 "< int value >,.,< double value >,.,< String value >"

并转换为使用 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 回答