从一个方法返回两个变量

时间:2014-10-27 10:40:54

标签: java string variables methods return

如何正确编写以下代码?

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.

5 个答案:

答案 0 :(得分:29)

使用 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);
}

否则只返回一个数组。

答案 1 :(得分:4)

您无法在Java中的方法中返回两个不同的值。

当出现这种情况时,通常有两种选择:

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

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

    return postn + "_" + movm;
    

答案 2 :(得分:4)

我可以考虑使用四种方法来实现这种情况:

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。使用数组

将方法更改为返回String数组并将值存储在该数组中:

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。使用javatuples

您可以在链接http://www.javatuples.org/

上阅读详细信息

4。通过分隔数据

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

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

答案 3 :(得分:2)

  

在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()
     }

答案 4 :(得分:1)

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