从一个方法返回两个变量

Posted

技术标签:

【中文标题】从一个方法返回两个变量【英文标题】:return two variables from one method 【发布时间】:2014-12-22 12:32:04 【问题描述】:

如何正确编写以下代码?

public String toString(int[] position, int xOffset, int yOffset) 
    String postn = String.format("[%d,%d]", position[0], position[1]);
    String movm = String.format("[%d,%d]", xOffset, yOffset);

    return (postn, movm);

出现以下错误

movm cannot be returned.

【问题讨论】:

嗨。可以返回 Map.Entry、2 个字符串的数组、2 个项的集合、将容器作为参数传递等。 以数组形式返回。所以你的方法签名将是public String[].....。另外,@Reimeus 回答了它..... 看这个:***.com/questions/2832472/… 在 Java 中,您只能返回一个变量/对象。如果你想返回两个字符串对象。我建议你把它们放在一个数组、列表或集合中,然后通过返回那个对象。 【参考方案1】:

使用 Java 8 时,您可以使用 Pair 类。

private static Pair<String, String> foo (/* some params */) 
    final String val1 = "";  // some calculation
    final String val2 = "";  // some other calculation

    return new Pair<>(val1, val2);

否则只返回一个数组。

【讨论】:

pair 类是一部分或javafx。我们可以在 SE 中使用吗? @SubhrajyotiMajumder As of JDK 7u6 JavaFX is included with the standard JDK and JRE bundles. @DavidM。我同意你的看法。尤其是在期待 Java9 模块化时,可能会遇到没有安装 UI 模块的运行时。数组或简单的 pojo 类可能更优雅。【参考方案2】:

Java 中的方法不能返回两个不同的值。

当这种需要发生时,您通常有两种选择:

    创建一个具有您想要返回的类型的类,然后返回该类的一个实例。通常这些类是非常基本的,包含公共成员和可选的构造函数来启动具有所有必需值的实例。 将引用类型对象作为参数添加到方法中,该方法将使用您想要返回的值进行变异。在您的示例中,您使用字符串,因此这将不起作用,因为在 Java 中字符串是不可变的。

另一种选择是使用字符串数组,因为您的两种返回类型都是字符串。您可以将此选项用作返回值,或由方法更改的参数。

编辑: 通常“toString”方法只返回一个字符串。也许您应该考虑使用一些分隔符将两个字符串连接成一个字符串。示例:

return postn + "_" + movm;

【讨论】:

【参考方案3】:

我可以想到四种方法来实现这个场景:

1。使用类

创建一个具有您想要返回的所有属性的类,在您的情况下它可以是

public class Sample 
   private String postn;
   private String movm;
   public String getPostn() 
        return postn;
   
   public void setPostn(String postn) 
    this.postn = postn;
   
   public String getMovm() 
       return movm;
   
   public void setMovm(String movm) 
       this.movm = movm;
       

并更改您的方法以包含此类的对象并在这些属性中设置值。将方法的返回类型更改为类名,例如样本

public Sample toString(int[] position, int xOffset, int yOffset) 
    String postn = String.format("[%d,%d]", position[0], position[1]);
    String movm = String.format("[%d,%d]", xOffset, yOffset);
    Sample obj = new Sample();
    obj.setPostn(postn);
    obj.setMovm(movm);
    return obj;

2。使用数组

更改方法以返回字符串数组并将值存储在该数组中:

public String[] toString(int[] position, int xOffset, int yOffset) 
    String postn = String.format("[%d,%d]", position[0], position[1]);
    String movm = String.format("[%d,%d]", xOffset, yOffset);
    String arr[] = new String[2];
    arr[0] = postn;
    arr[1] = movm;
    return arr;

3。使用 javatuple

您可以在链接http://www.javatuples.org/阅读详细信息

4。通过分隔数据

如果您确定变量中的数据,您可以使用一些分隔符。但是,当您想使用这些值时,这将需要使用分隔符进行吐痰。

public String toString(int[] position, int xOffset, int yOffset) 
    String postn = String.format("[%d,%d]", position[0], position[1]);
    String movm = String.format("[%d,%d]", xOffset, yOffset);
    return postn+"~"+movm;

【讨论】:

【参考方案4】:

在Java中,当你想要一个函数返回多个值时,你必须

将这些值嵌入到您返回的对象中 或更改传递给您的函数的对象 ~dystroy

你有两个选择(据我所知):

选项1:作为新数组返回:

 public String[] toString(int[] position,int xOffset,int yOffset) 
        String postn=String.format("[%d,%d]",position[0],position[1]);
        String movm=String.format("[%d,%d]",xOffset,yOffset);

        string [] myArray = new string[2];
        myArray[0] = postn;
        myArray[1] = movm;

        return myarray; //returns as array
     

选项 2:原样返回

已编辑以显示设置

    private String a;
    private String b;

    public void setPostN(String s)
    
            a= s;
    

    public String getPostN()
    
            return a;
    

    public void setMovm(String s)
    
            a= s;
    

    public String getMovm() 
    
            return a;
    

用你的方法:

public void toString(int[] position,int xOffset,int yOffset) 
        String postn=String.format("[%d,%d]",position[0],position[1]);
        String movm=String.format("[%d,%d]",xOffset,yOffset);

        setPostN(postn);
        setMovm(movm);

       //no return, but available via calling getMovm() or getPostN()
     

【讨论】:

obj 似乎主要是 C#。 很好的插图,但也许你想调用你的类 Obj 而不是 obj 并写出 getter 和 setter 方法来获得一个可编译的例子:) 感谢您的 cmets,@Henrik 这可能是因为 java/c# 非常相似(而且我使用 99% c# :P) ObjClass 看起来很 CShapry。这个问题是关于 Java 的,因为它是一个非常基本的问题,所以这个答案可能会非常令人困惑。 只公开它们可能就足够了 :)【参考方案5】:

您可以创建一个包装器类型,实例化并返回它,或者返回一个 Map 或 List/Array。

【讨论】:

以上是关于从一个方法返回两个变量的主要内容,如果未能解决你的问题,请参考以下文章

使用jquery从一个函数返回两个数组[重复]

从标量 SQL 函数返回两个值

从 void 和 boolean 方法返回多个值

从 main 调用带有返回变量的方法

==和equals

如何从 Java 方法返回多个对象?