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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Entrada | Lo que escribe la persona que usa el programa. | 3 |
| Scanner | La herramienta de Java que lee la entrada. | new Scanner(System.in) |
| Importar | Avisar a Java de que vas a usar una herramienta que no viene incluida. | import java.util.Scanner; |
| nextInt | La orden que lee un número entero. | int age = keyboard.nextInt(); |
| nextLine | La orden que lee una línea entera de texto. | String phrase = keyboard.nextLine(); |
| Intro | La 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
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
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
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"
| Orden | Lee | Se guarda en | Valor |
|---|---|---|---|
| next() | La primera palabra | String name | "Lucía" |
| nextInt() | El siguiente número entero | int age | 17 |
| nextDouble() | El siguiente número con decimales | double height | 1.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
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.
}
}