Saltar al contenido principal

Entrada de datos por teclado

La entrada de datos por teclado en Java puede realizarse usando la clase Scanner, que forma parte del paquete java.util. La clase Scanner permite leer diferentes tipos de datos desde la entrada estándar (normalmente, el teclado). Aquí tienes un paso a paso sobre cómo utilizar Scanner para recibir entrada del usuario:

Primero, necesitas importar la clase Scanner en tu programa.

import java.util.Scanner;

Después de importar la clase, debes crear una instancia de Scanner.

Scanner scanner = new Scanner(System.in);

Ahora puedes usar métodos de la clase Scanner para leer diferentes tipos de datos. Aquí están algunos de los métodos más comunes:

  • nextInt(): Lee un número entero.
  • nextDouble(): Lee un número en punto flotante. Cuando se introduce este número, el separador de decimales es la coma (,).
  • nextLine(): Lee una cadena de texto (incluyendo espacios).
  • next(): Lee la próxima palabra (sin espacios).

Ejemplo completo

A continuación, se muestra un ejemplo completo que ilustra cómo recibir diferentes tipos de entrada del usuario:

import java.util.Scanner;

public class EjemploEntrada {
public static void main(String[] args) {
// Crear un objeto Scanner
Scanner scanner = new Scanner(System.in);

// Leer un número entero
System.out.print("Introduce tu edad: ");
int edad = scanner.nextInt();

// Leer un número en punto flotante
System.out.print("Introduce tu altura en metros: ");
double altura = scanner.nextDouble();

// Limpiar el buffer de entrada (si es necesario)
scanner.nextLine(); // Este paso es importante si vas a leer cadenas después de leer números

// Leer una cadena de texto
System.out.print("Introduce tu nombre: ");
String nombre = scanner.nextLine();

// Mostrar los datos recibidos
System.out.println("Nombre: " + nombre);
System.out.println("Edad: " + edad);
System.out.println("Altura: " + altura);

// Cerrar el objeto Scanner
scanner.close();
}
}

Notas Importantes:

  • Limpieza del buffer: Después de leer números, si deseas leer una cadena, es recomendable usar scanner.nextLine() para limpiar el buffer. Esto evita que se salte la entrada de la cadena.
  • Cerrar el Scanner: Es buena práctica cerrar el objeto Scanner después de usarlo para liberar recursos. Usa scanner.close() para hacerlo. Una vez cerrado, no se podrá volver a abrir.

¿Qué es un buffer?

Cuando usamos java.util.Scanner, este lee los datos del teclado (System.in) a través de un buffer de entrada. Un buffer es simplemente una zona de memoria temporal donde se almacenan los datos que el usuario escribe antes de que el programa los procese.

Por ejemplo, si el usuario escribe:

25⏎

Esa línea completa (25 más el carácter de salto de línea \n) se guarda en el buffer. Luego, el método nextInt() lee solo el número 25, pero deja el salto de línea \n dentro del buffer.

El problema con nextInt() y nextLine()

Supón que haces esto:

Scanner sc = new Scanner(System.in);

System.out.print("Edad: ");
int edad = sc.nextInt(); // Lee solo el número

System.out.print("Nombre: ");
String nombre = sc.nextLine(); // ¡Problema aquí!

Cuando el usuario escribe 25⏎, el nextInt() lee el 25, pero deja el salto de línea (\n) en el buffer. Entonces, cuando llega el nextLine(), lee ese salto de línea que había quedado pendiente, y cree que el usuario ya introdujo una línea vacía.

El resultado es que nombre queda vacío ("").

¿Cómo solucionarlo?

Después de leer con nextInt(), puedes limpiar el buffer usando un nextLine() adicional:

System.out.print("Edad: ");
int edad = sc.nextInt();
sc.nextLine(); // <-- limpia el salto de línea pendiente

System.out.print("Nombre: ");
String nombre = sc.nextLine();

Ahora sí, nextLine() esperará correctamente a que el usuario escriba una cadena.

Resumen de los métodos utilizados:

Método¿Qué lee?¿Qué deja en el buffer?
nextInt()Solo el númeroEl salto de línea \n
next()Una palabra (hasta un espacio)El resto de la línea
nextLine()Toda la línea (hasta \n)Nada (consume el salto de línea)