Ir al contenido principal

Entrada y salida básica por consola

Introducción

La interacción con el usuario es un elemento fundamental en cualquier programa. En Java, podemos realizar esta interacción a través de la consola utilizando las clases del paquete java.io y la clase Scanner. La entrada por consola nos permite recibir datos desde el teclado, mientras que la salida nos permite mostrar información en pantalla. Estas operaciones son básicas pero esenciales para crear programas interactivos y representan el primer paso hacia interfaces más complejas.

En este artículo aprenderemos a utilizar los mecanismos básicos que Java proporciona para obtener información del usuario y mostrar resultados, convirtiendo así nuestros programas en aplicaciones interactivas.

Salida por consola en Java

Uso de System.out

La forma más común de mostrar información en consola es mediante el objeto System.out. Este objeto representa la salida estándar del programa y ofrece varios métodos para mostrar datos:

Método println()

El método println() muestra el texto especificado y añade un salto de línea al final:

System.out.println("Hola, bienvenido al tutorial de Java.");
System.out.println("Esta línea aparece en la siguiente línea.");

Resultado:

Hola, bienvenido al tutorial de Java.
Esta línea aparece en la siguiente línea.

Método print()

El método print() muestra el texto sin añadir un salto de línea:

System.out.print("Hola, ");
System.out.print("este texto aparece ");
System.out.print("en la misma línea.");

Resultado:

Hola, este texto aparece en la misma línea.

Método printf()

El método printf() permite dar formato a la salida utilizando especificadores de formato, similar a la función del mismo nombre en el lenguaje C:

String nombre = "María";
int edad = 25;
double altura = 1.75;

System.out.printf("Nombre: %s, Edad: %d años, Altura: %.2f metros\n", nombre, edad, altura);

Resultado:

Nombre: María, Edad: 25 años, Altura: 1.75 metros

Los especificadores de formato más comunes son:

  • %s: Para cadenas de texto (String)
  • %d: Para números enteros (int, long)
  • %f: Para números decimales (float, double)
  • %.2f: Para números decimales con precisión específica (en este caso, 2 decimales)
  • %n o \n: Para insertar un salto de línea

Concatenación de valores

También podemos mostrar información combinando texto y variables mediante concatenación:

String producto = "portátil";
double precio = 899.99;
System.out.println("El " + producto + " cuesta " + precio + " euros.");

Resultado:

El portátil cuesta 899.99 euros.

Entrada por consola en Java

La clase Scanner

Para leer datos desde la consola, utilizamos principalmente la clase Scanner del paquete java.util. Esta clase nos proporciona varios métodos para leer diferentes tipos de datos:

import java.util.Scanner; // Importante: debemos importar la clase Scanner

public class LecturaConsola {
    public static void main(String[] args) {
        // Creamos un objeto Scanner para leer de la entrada estándar (teclado)
        Scanner scanner = new Scanner(System.in);
        
        // Resto del código...
    }
}

Lectura de diferentes tipos de datos

Lectura de texto

Para leer una cadena de texto:

System.out.print("Introduce tu nombre: ");
String nombre = scanner.nextLine(); // Lee una línea completa de texto
System.out.println("Hola, " + nombre + "!");

También podemos usar el método next() que lee solo hasta el primer espacio:

System.out.print("Introduce una palabra: ");
String palabra = scanner.next(); // Lee solo hasta encontrar un espacio
System.out.println("Has escrito: " + palabra);

Lectura de números

Para leer valores numéricos:

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

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

System.out.println("Tienes " + edad + " años y mides " + altura + " metros.");

Manejo de errores de entrada

Es importante considerar que si el usuario introduce un valor que no corresponde con el tipo esperado, se producirá una excepción. Por ejemplo, si esperamos un número pero el usuario introduce texto. En una aplicación real, deberíamos manejar estas excepciones:

import java.util.Scanner;
import java.util.InputMismatchException;

public class ManejoErroresEntrada {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        try {
            System.out.print("Introduce tu edad: ");
            int edad = scanner.nextInt();
            System.out.println("Tienes " + edad + " años.");
        } catch (InputMismatchException e) {
            System.out.println("Error: debes introducir un número entero.");
        }
        
        // Es buena práctica cerrar el scanner cuando ya no lo necesitamos
        scanner.close();
    }
}

Importante: Mezclar lecturas numéricas y de texto

Al mezclar lecturas de diferentes tipos, especialmente después de leer un número con nextInt() o nextDouble() y luego intentar leer texto con nextLine(), pueden surgir problemas debido a que los métodos numéricos no consumen el salto de línea. Para evitar esto, podemos usar un nextLine() adicional para consumir ese salto de línea:

System.out.print("Introduce tu edad: ");
int edad = scanner.nextInt();
scanner.nextLine(); // Consume el salto de línea pendiente

System.out.print("Introduce tu nombre completo: ");
String nombreCompleto = scanner.nextLine();

System.out.println("Te llamas " + nombreCompleto + " y tienes " + edad + " años.");

Ejemplo práctico: Calculadora simple

Veamos un ejemplo completo que combina entrada y salida para crear una calculadora simple:

import java.util.Scanner;

public class CalculadoraSimple {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("=== CALCULADORA SIMPLE ===");
        
        // Solicitar primer número
        System.out.print("Introduce el primer número: ");
        double numero1 = scanner.nextDouble();
        
        // Solicitar segundo número
        System.out.print("Introduce el segundo número: ");
        double numero2 = scanner.nextDouble();
        
        // Realizar operaciones
        double suma = numero1 + numero2;
        double resta = numero1 - numero2;
        double multiplicacion = numero1 * numero2;
        
        // Mostrar resultados
        System.out.println("\nResultados:");
        System.out.printf("%f + %f = %f\n", numero1, numero2, suma);
        System.out.printf("%f - %f = %f\n", numero1, numero2, resta);
        System.out.printf("%f * %f = %f\n", numero1, numero2, multiplicacion);
        
        // Comprobar si se puede dividir
        if (numero2 != 0) {
            double division = numero1 / numero2;
            System.out.printf("%f / %f = %f\n", numero1, numero2, division);
        } else {
            System.out.println("No se puede dividir por cero.");
        }
        
        // Cerrar el scanner
        scanner.close();
    }
}

Para ejecutar este programa:

  1. Guarda el código en un archivo llamado CalculadoraSimple.java
  2. Compila el programa: javac CalculadoraSimple.java
  3. Ejecuta la aplicación: java CalculadoraSimple
  4. Introduce los números cuando te los solicite

Resumen

En este artículo hemos aprendido a utilizar los mecanismos básicos de entrada y salida por consola en Java. Para la salida, utilizamos principalmente System.out con sus métodos print(), println() y printf(), que nos permiten mostrar información al usuario con diferentes formatos. Para la entrada, empleamos la clase Scanner, que nos facilita la lectura de distintos tipos de datos desde el teclado.

Estas herramientas son fundamentales para crear programas interactivos y son el primer paso antes de adentrarnos en interfaces gráficas más sofisticadas. En los próximos artículos, continuaremos explorando elementos esenciales del lenguaje Java que nos permitirán desarrollar aplicaciones cada vez más complejas y funcionales.