Easier to read with cream paper, a tint, more contrast or larger text? Choose your colours and text, once, for every page.

Vista previa

Leer datos del teclado

Esta es la primera página de la lección. Léela y prueba las actividades. El resto está en el curso completo.

35 minutos

Un programa que te pregunta

Hasta ahora tus programas tenían los datos escritos dentro. Siempre hacían la misma cuenta.

Piensa en la app que usas para pedir comida. Te pregunta qué quieres y cuántos. Después calcula el precio.

Hoy tu programa va a preguntar y a leer lo que escribe quien lo usa.

Palabras clave

PalabraQué significaEjemplo
EntradaLo que escribe la persona que usa el programa.3
ScannerLa herramienta de Java que lee la entrada.new Scanner(System.in)
ImportarAvisar a Java de que vas a usar una herramienta que no viene incluida.import java.util.Scanner;
nextIntLa orden que lee un número entero.int age = keyboard.nextInt();
nextLineLa orden que lee una línea entera de texto.String phrase = keyboard.nextLine();
IntroLa tecla que termina una línea. Escribe un salto de línea.Intro

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Tres pasos para leer

Primero importas Scanner, arriba del todo. Es como abrir la caja de herramientas.

Segundo, creas un Scanner que mira el teclado: new Scanner(System.in).

Tercero, lees con una orden como nextInt(). El programa se para y espera a que escribas.

Pruébalo: la cuenta del bar

Código: java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // El usuario "escribe" 3 y 2.
        Scanner keyboard = new Scanner("3 2");

        int sandwiches = keyboard.nextInt();
        int sodas = keyboard.nextInt();

        int total = sandwiches * 4 + sodas * 2;
        System.out.println("Pagas " + total + " euros.");

        // Cambia "3 2" por "5 1" y ejecuta otra vez.
    }
}

Un teclado de mentira

Nota

En esta página no hay teclado. Por eso el bloque de arriba usó new Scanner("3 2"). Es un Scanner que lee ese texto como si alguien lo escribiera. Todo lo demás es igual.

Así se ve con el teclado de verdad

Código: java
import java.util.Scanner;

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

        System.out.println("¿Cuántos bocadillos quieres?");
        int sandwiches = keyboard.nextInt();

        System.out.println("Has pedido " + sandwiches + ".");
    }
}

Cada dato, su orden

Hay una orden para cada tipo de dato.

nextInt() lee un entero. nextDouble() lee un decimal. next() lee una palabra, hasta el primer espacio. nextLine() lee la línea entera.

Si escribes una letra donde se espera un número, el programa falla.

Pruébalo: nombre y edad

Código: java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner("Lucía 17");

        String name = keyboard.next();
        int age = keyboard.nextInt();

        System.out.println(name + " tiene " + age + " años.");
        System.out.println("El año que viene tendrá " + (age + 1) + ".");
    }
}

Ejemplo resuelto: leer "Lucía 17 1.65"

OrdenLeeSe guarda enValor
next()La primera palabraString name"Lucía"
nextInt()El siguiente número enteroint age17
nextDouble()El siguiente número con decimalesdouble height1.65

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Decimales: punto o coma

Advertencia

En un ordenador configurado en español, nextDouble() puede esperar una coma: 1,65. Si falla con un punto, escribe keyboard.useLocale(Locale.US); y usa punto.

La trampa del salto de línea

Al terminar de escribir pulsas Intro. Eso escribe un salto de línea.

nextInt() lee el número, pero deja el salto de línea sin leer. Si luego llamas a nextLine(), lee solo ese salto y te da un texto vacío.

La solución es gastar ese salto con un nextLine() extra.

Pruébalo: la edad y el nombre

Código: java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Dos líneas: la edad y, debajo, el nombre.
        Scanner keyboard = new Scanner("17\nIker\n");

        int age = keyboard.nextInt();
        keyboard.nextLine();
        String name = keyboard.nextLine();

        System.out.println("[" + name + "] tiene " + age + " años.");

        // Borra la línea con el nextLine suelto y mira qué sale entre corchetes.
    }
}

La lección continúa

5 partes más de esta lección están en el curso completo, con los ejercicios y la comprobación final. Una cuenta te da todo.