我试图从一个Java方法返回2个值,但我得到这些错误。这是我的代码:

// Method code
public static int something(){
    int number1 = 1;
    int number2 = 2;

    return number1, number2;
}

// Main method code
public static void main(String[] args) {
    something();
    System.out.println(number1 + number2);
}

错误:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - missing return statement
    at assignment.Main.something(Main.java:86)
    at assignment.Main.main(Main.java:53)

Java结果:1


当前回答

您不需要创建自己的类来返回两个不同的值。就像这样使用HashMap:

private HashMap<Toy, GameLevel> getToyAndLevelOfSpatial(Spatial spatial)
{
    Toy toyWithSpatial = firstValue;
    GameLevel levelToyFound = secondValue;

    HashMap<Toy,GameLevel> hm=new HashMap<>();
    hm.put(toyWithSpatial, levelToyFound);
    return hm;
}

private void findStuff()
{
    HashMap<Toy, GameLevel> hm = getToyAndLevelOfSpatial(spatial);
    Toy firstValue = hm.keySet().iterator().next();
    GameLevel secondValue = hm.get(firstValue);
}

甚至还有类型安全的好处。

其他回答

首先,如果Java有元组来返回多个值会更好。

其次,编写尽可能简单的Pair类,或者使用数组。

但是,如果您确实需要返回一个pair,请考虑它所代表的概念(从字段名开始,然后是类名)—以及它所扮演的角色是否比您想象的更大,以及对它进行显式抽象是否有助于您的整体设计。也许这是一个代码提示…… 请注意:我并不是武断地说它会有帮助,但只是看看,看看它是否有用……或者如果没有。

在Java中只能返回一个值,所以最简洁的方法是这样的:

return new Pair<Integer>(number1, number2);

这是你的代码的更新版本:

public class Scratch
{
    // Function code
    public static Pair<Integer> something() {
        int number1 = 1;
        int number2 = 2;
        return new Pair<Integer>(number1, number2);
    }

    // Main class code
    public static void main(String[] args) {
        Pair<Integer> pair = something();
        System.out.println(pair.first() + pair.second());
    }
}

class Pair<T> {
    private final T m_first;
    private final T m_second;

    public Pair(T first, T second) {
        m_first = first;
        m_second = second;
    }

    public T first() {
        return m_first;
    }

    public T second() {
        return m_second;
    }
}

使用Pair/Tuple类型的对象,如果你依赖于Apache common -lang,你甚至不需要创建一个。只需使用Pair类。

Java不支持多值返回。返回一个值数组。

// Function code
public static int[] something(){
    int number1 = 1;
    int number2 = 2;
    return new int[] {number1, number2};
}

// Main class code
public static void main(String[] args) {
  int result[] = something();
  System.out.println(result[0] + result[1]);
}

在我看来,最好是创建一个新类,其中构造函数是你需要的函数,例如:

public class pairReturn{
        //name your parameters:
        public int sth1;
        public double sth2;
        public pairReturn(int param){
            //place the code of your function, e.g.:
            sth1=param*5;
            sth2=param*10;
        }
    }

然后像使用函数一样使用构造函数:

pairReturn pR = new pairReturn(15);

你可以使用pR.sth1 pR.sth2作为函数的2个结果