¿Cómo devolver 2 valores de un método Java?
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
En lugar de devolver una matriz que contenga los dos valores o utilizar una Pair
clase 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());
}
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]);
}
Podrías implementar un genérico Pair
si 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();
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;
}
}