Valores de retorno en Java
Escribe un método llamado twice que tome un int llamado n y envíe de vuelta el doble de ese número. El encabezado empieza con int, no con void: static int twice(int n). Dentro de las llaves escribe return n * 2;. En main imprime el resultado de la llamada: System.out.println(twice(7));. La pantalla debe mostrar una línea: 14. twice mismo no llama a println. Solo entrega 14. main imprime ese número. Esa entrega es lo que enseña esta página.
Entrega un número a main
En la página de parameters, greet y show imprimían dentro del cuerpo del método. La llamada enviaba un valor hacia dentro y el método escribía en la pantalla. Aquí el método sigue recibiendo un valor, pero también envía un valor hacia fuera. La palabra return marca ese valor saliente. main puede guardarlo o imprimirlo.
Crea un archivo de programa pequeño llamado Box.java. El public class de la primera línea debe coincidir con el nombre del archivo: public class Box. No dejes un nombre de clase antiguo Tip o Chime en este archivo; el compilador espera que el nombre de la clase y el del archivo coincidan.
Fuera de main, aún dentro de las llaves de la clase, escribe:
static int twice(int n) {
return n * 2;
}
El encabezado ya no dice void. Dice int porque el valor que vuelve es un int. Entre los paréntesis, int n sigue siendo un parámetro — la misma idea que en la página anterior. El cuerpo tiene una sentencia: return n * 2;. Eso multiplica n por 2 y envía el producto a quien llamó a twice. No hay System.out.println dentro de twice en esta página. Guarda el archivo antes de compilar.
Box.java con twice
Este es el programa pequeño completo. twice calcula. main imprime.
public class Box {
public static void main(String[] args) {
System.out.println(twice(7));
}
static int twice(int n) {
return n * 2;
}
}
Desde la carpeta que contiene Box.java, ejecuta javac Box.java. Cuando los paréntesis, las llaves y los puntos y coma coinciden, javac no escribe ninguna línea propia. Luego ejecuta java Box — no java Box.java. Quita el final .java del segundo comando. Los mismos dos comandos funcionan en Windows y en macOS; esta página no necesita una ortografía de shell distinta para ninguno de los sistemas. El programa debe imprimir una línea y detenerse: 14. No debe pedirte que escribas. Si la terminal espera entrada del teclado, todavía hay una llamada nextLine de un ejercicio anterior en el archivo. Borra esa llamada y conserva System.out.println(twice(7)); más el método twice de arriba. Una línea incorrecta en la pantalla no significa que necesites instalar de nuevo el JDK.
Recorre una ejecución en orden. Java empieza en main. La llamada twice(7) envía 7 a n. Dentro de twice, return n * 2; calcula 14 y entrega ese 14 a main. Luego println escribe 14. twice nunca escribió en la pantalla por sí solo. Si cambias la llamada a twice(3), la pantalla debe mostrar 6. El cuerpo del método se queda igual; solo cambia el argumento, y el producto devuelto cambia con él. Si la pantalla muestra 7 en lugar de 14, imprimiste n dentro de twice o imprimiste el argumento en main sin llamar a twice — pon la duplicación en la línea return e imprime el resultado de la llamada.
También puedes guardar el valor devuelto en un nombre dentro de main antes de imprimir:
int result = twice(7);
System.out.println(result);
Eso también muestra una línea: 14. Primero termina la llamada y llena result. Luego println escribe result. Ambas formas — imprimir la llamada directamente, o guardar y luego imprimir — usan el mismo return de twice.
Imprime el valor que recibió main
Cambia solo el número en la llamada si quieres una línea distinta en la pantalla. Deja return n * 2; como está. Compila y ejecuta de nuevo después de cada cambio: javac Box.java, luego java Box. twice(0) debe imprimir 0. twice(10) debe imprimir 20. Cada vez main imprime lo que twice entregó.
Si twice todavía dice void en el encabezado pero el cuerpo tiene return n * 2;, javac escribe un error — void significa que nada vuelve, así que un return con valor no encaja. Si el encabezado dice int pero el cuerpo no tiene return, javac también escribe un error — un método int en esta forma de principiante debe devolver un int en cada camino. Si el cuerpo imprime y nunca hace return, estás de vuelta en la idea de la página Tip; esta página quiere el número en las manos de main.
void frente a un retorno tipado
Lee las dos formas una al lado de la otra. Un método void ejecuta su cuerpo y termina. Un método con retorno tipado debe entregar un valor con return. Cuando el tipo de retorno no es void, main trata la llamada como ese valor.
📊 cuerpo void frente a return
| Forma | Qué hace el método | Qué hace main a menudo |
|---|---|---|
| void show(int n) | imprime dentro del cuerpo | llama show(9); y puede no imprimir nada más |
| int twice(int n) | return n * 2; | imprime o guarda twice(7) |
Una confusión frecuente es poner System.out.println(n * 2); dentro de twice y dejar el encabezado como int sin return. Entonces javac se queja, o cambias el encabezado otra vez a void y ya no tienes un valor para que main imprima desde la llamada. Otra confusión es escribir return; sin valor mientras el encabezado dice int. Conserva return n * 2; para que el tipo de la expresión devuelta coincida con int. Escribir System.out.println("twice"); en main imprime la palabra twice; no llama al método. Conserva println(twice(7)) cuando quieras 14 en la pantalla.
Una demo greet sobrante de la página Tip que solo imprime hi lena dentro del método puede quedarse en el mismo archivo y confundir la pantalla. Limpia main hasta el println que usa twice, y conserva un método que devuelve. No anides twice dentro de las llaves de main. Los métodos viven dentro de la clase, junto a main. Cierra las llaves de twice antes de que termine la clase.
Antes de overloading
Puedes escribir static int twice(int n), devolver un valor calculado e imprimir ese valor desde main. La pantalla muestra el número que recibió main, no una línea que el método imprimió por su cuenta. void es el encabezado equivocado cuando necesitas un valor de vuelta. La página siguiente es overloading, donde más de un método puede compartir un nombre cuando sus listas de parámetros difieren.
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior