¿Cómo devolver 2 valores de un método Java?

Resuelto javaLearner.java asked hace 14 años • 16 respuestas

Estoy intentando devolver 2 valores de un método Java pero recibo estos errores. Aquí está mi código:

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

Error:

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)

Resultado de Java: 1

javaLearner.java avatar May 14 '10 14:05 javaLearner.java
Aceptado

En lugar de devolver una matriz que contenga los dos valores o utilizar una Pairclase genérica, considere crear una clase que represente el resultado que desea devolver y devolver una instancia de esa clase. Dale a la clase un nombre significativo. Los beneficios de este enfoque sobre el uso de una matriz son la seguridad de tipos y hará que su programa sea mucho más fácil de entender.

Nota: Una clase genérica Pair, como se propone en algunas de las otras respuestas aquí, también le brinda seguridad de tipo, pero no transmite lo que representa el resultado.

Ejemplo (que no utiliza nombres realmente significativos):

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());
}
Jesper avatar May 14 '2010 07:05 Jesper

Java no admite devoluciones de valores múltiples. Devuelve una matriz de valores.

// 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]);
}
Matt avatar May 14 '2010 07:05 Matt

Podrías implementar un genérico Pairsi estás seguro de que solo necesitas devolver dos valores:

public class Pair<U, V> {

 /**
     * The first element of this <code>Pair</code>
     */
    private U first;

    /**
     * The second element of this <code>Pair</code>
     */
    private V second;

    /**
     * Constructs a new <code>Pair</code> with the given values.
     * 
     * @param first  the first element
     * @param second the second element
     */
    public Pair(U first, V second) {

        this.first = first;
        this.second = second;
    }

//getter for first and second

y luego hacer que el método devuelva eso Pair:

public Pair<Object, Object> getSomePair();
Lars Andren avatar May 14 '2010 07:05 Lars Andren

Sólo puedes devolver un valor en Java, por lo que la forma más sencilla es así:

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

Aquí hay una versión actualizada de su código:

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;
    }
}
richj avatar May 14 '2010 07:05 richj