Para leer del teclado en Java hubo durante años que crear un Scanner o un BufferedReader. Java 25 añadió la clase IO, con IO.readln: pedir un dato es una línea. Aquí están las dos formas, y cómo convertir lo que escriben a número sin que el programa se caiga.
También te puede interesar
Con IO.readln (Java 25)
void main() {
String nombre = IO.readln("¿Cómo te llamas? ");
int edad = Integer.parseInt(IO.readln("¿Cuántos años tienes? ").strip());
IO.println("Hola, " + nombre + ". En diez años tendrás " + (edad + 10) + ".");
}salida (la entrada fue «Ana» y «31»; lo tecleado no se repite aquí)¿Cómo te llamas? ¿Cuántos años tienes? Hola, Ana. En diez años tendrás 41.
IO.readln(mensaje) muestra el mensaje y espera a que el usuario escriba una línea y pulse Enter. Siempre devuelve texto; para un número hay que convertirlo con Integer.parseInt o Double.parseDouble.
Que un dato mal escrito no tire el programa
int pedirEntero(String mensaje) {
while (true) {
String texto = IO.readln(mensaje);
if (texto == null) throw new IllegalStateException("se acabó la entrada");
try {
return Integer.parseInt(texto.strip());
} catch (NumberFormatException e) {
IO.println("«" + texto + "» no es un número entero. Intenta otra vez.");
}
}
}
void main() {
int piezas = pedirEntero("¿Cuántas piezas? ");
IO.println("Pediste " + piezas + " piezas.");
}salida (el usuario escribió «doce» y luego «12»)¿Cuántas piezas? «doce» no es un número entero. Intenta otra vez. ¿Cuántas piezas? Pediste 12 piezas.
parseInt lanza NumberFormatException si el texto no es un número, y el bucle vuelve a preguntar. readln devuelve null si la entrada se acaba (por ejemplo, al pulsar Ctrl+D), y hay que contemplarlo para no entrar en un bucle infinito.
Con Scanner: varios datos en una línea
import java.util.Scanner;
void main() {
var entrada = new Scanner(System.in);
int n = entrada.nextInt();
long suma = 0;
for (int i = 0; i < n; i++) suma += entrada.nextInt();
IO.println("La suma de los " + n + " números es " + suma);
}salida (la entrada fue «3» y «10 20 30»)La suma de los 3 números es 60
Scanner parte la entrada en palabras y convierte cada una con nextInt, nextDouble o next, sin importar si vienen en la misma línea o en varias. Es lo práctico para problemas de programación competitiva y para leer archivos de números. La trampa clásica: después de nextInt(), un nextLine() devuelve el resto vacío de la línea anterior; no mezcles los dos estilos, o lee siempre con nextLine() y convierte tú.
Todo el código se compiló y se ejecutó con Java 25 LTS en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.