我试图从一个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


当前回答

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

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

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

其他回答

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

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

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

下面是SimpleEntry的简单解决方案:

AbstractMap.Entry<String, Float> myTwoCents=new AbstractMap.SimpleEntry<>("maximum possible performance reached" , 99.9f);

String question=myTwoCents.getKey();
Float answer=myTwoCents.getValue();

只使用Java内置函数,并且它具有类型安全的好处。

您必须使用集合来返回多个返回值

在您的情况下,您将代码编写为

public static List something(){
        List<Integer> list = new ArrayList<Integer>();
        int number1 = 1;
        int number2 = 2;
        list.add(number1);
        list.add(number2);
        return list;
    }

    // Main class code
    public static void main(String[] args) {
      something();
      List<Integer> numList = something();
    }

与其返回包含这两个值的数组或使用通用的Pair类,不如考虑创建一个表示希望返回的结果的类,并返回该类的一个实例。给类一个有意义的名字。与使用数组相比,这种方法的好处是类型安全,它将使您的程序更容易理解。

注意:泛型的Pair类,正如这里其他一些回答中提出的那样,也提供了类型安全,但不传达结果所代表的内容。

示例(没有使用真正有意义的名称):

final class MyResult {
    private final int first;
    private final int second;

    public MyResult(int first, int second) {
        this.first = first;
        this.second = second;
    }

    public int getFirst() {
        return first;
    }

    public int getSecond() {
        return second;
    }
}

// ...

public static MyResult something() {
    int number1 = 1;
    int number2 = 2;

    return new MyResult(number1, number2);
}

public static void main(String[] args) {
    MyResult result = something();
    System.out.println(result.getFirst() + result.getSecond());
}

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