Saltar al contenido principal

Entrada y salida con Scanner

Hasta ahora los datos estaban escritos en el programa. Para conversar con quien lo ejecuta necesitamos mostrar preguntas y leer respuestas.

Mostrar información​

println termina la línea; print deja el cursor a continuación:

System.out.print("Nombre: ");
System.out.println("Ada");

Leer desde la consola​

import java.util.Scanner;

public class Presentacion {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);

System.out.print("¿Cómo te llamas? ");
String nombre = entrada.nextLine();

System.out.println("Hola, " + nombre);
entrada.close();
}
}

El import permite usar Scanner; la variable entrada representa el lector conectado a la entrada estándar. No necesitamos estudiar todavía objetos ni imports en profundidad.

Métodos habituales​

  • nextLine() lee una línea completa como texto.
  • nextInt() lee un entero.
  • nextDouble() lee un decimal.
  • nextBoolean() lee los valores true o false.
System.out.print("Edad: ");
int edad = entrada.nextInt();
System.out.print("Altura en metros: ");
double altura = entrada.nextDouble();
System.out.print("¿Tienes experiencia? (true/false): ");
boolean tieneExperiencia = entrada.nextBoolean();

El separador decimal que acepta nextDouble() depende de la configuración regional de Java. Usa el formato esperado por tu entorno.

El salto de línea pendiente​

Al pulsar Enter después de nextInt(), el número se consume, pero el salto de línea queda pendiente. El siguiente nextLine() podría leerlo como una línea vacía:

int edad = entrada.nextInt();
entrada.nextLine(); // consume el Enter pendiente
String ciudad = entrada.nextLine();

Otra estrategia sencilla es leer todo con nextLine() y convertirlo, pero el tratamiento de entradas no numéricas se estudiará más adelante.

Programa interactivo​

import java.util.Scanner;

public class Reserva {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);

System.out.print("Nombre: ");
String nombre = entrada.nextLine();
System.out.print("Número de personas: ");
int personas = entrada.nextInt();
System.out.print("Precio por persona: ");
double precio = entrada.nextDouble();

double total = personas * precio;
System.out.println("Reserva de " + nombre + ": " + total + " €");

entrada.close();
}
}

Práctica​

Crea una ficha que pida edad y ciudad y muestre ambas. Incluye la corrección del salto pendiente.

Solución:

import java.util.Scanner;

public class Ficha {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Edad: ");
int edad = entrada.nextInt();
entrada.nextLine();
System.out.print("Ciudad: ");
String ciudad = entrada.nextLine();
System.out.println("Edad: " + edad + ", ciudad: " + ciudad);
entrada.close();
}
}

Si se introduce texto donde nextInt() espera un entero, el programa termina con un error. En Java 0 indicaremos claramente el formato esperado; la gestión de excepciones queda para más adelante.

Ya podemos recibir datos reales. En la siguiente unidad los usaremos para tomar decisiones.