import java.io.*;
import java.util.*;
public class input
{
public static void main (String[] args)
{
int k;
Scanner in = new Scanner(System.in);
System.out.print ("Introduce dos numeros separados por espacios ? ");
int n = in.nextInt();
int t = in.nextInt();
System.out.println ("Has introducido " + n + "y " + t);
int[] a = new int[10];
System.out.println ("Instroduce 10 numeros separados por espacios ? ");
for (k = 0; k < 10; k++)
{
int i = in.nextInt();
System.out.print (i + " ");
}
System.out.println ("");
}
}Java ofrece distintas formas de leer valores del usuario. En esta
ocasión vamos a ilustrar el uso de la clase Scanner que es
la forma más habitual de leer datos del usuario a través de la consola.
Esta clase nos permite leer datos del usuario e ir interpretándolos y
convirtiéndolos uno a uno, de una forma semejante a la función C
estándar scanf.
La clase Scaner ofrece múltiples métodos para leer y
convertir datos. En este ejemplo concreto estamos utilizando solamente
el método nextInt el cual leerá el siguiente valor entero
que encuentre en la entrada del usuario.
En caso que necesitemos validar los valores introducidos por el
usuario, la forma más habitual de hacerlo es leyendo la entrada en una
cadena de texto y a continuación utilizar los métodos
parseDouble de la clase Double o
parseInt de la clase Integer. El siguiente
código muestra como usar el método parseInt.
String input = scanner.nextLine();
try {
numero = Integer.parseInt(input);
} catch (NumberFormatException e) {
System.out.println ("Número inválido");
}Como suele ser habitual en lenguajes con soporte de excepciones, la forma de ser informados si la entrada es correcta o no es a través de una excepción, como se puede ver en el ejemplo anterior.
La clase
Scannerofrece un método llamadohasNextInt()que nos permite saber si el siguiente valor que vamos a leer de la cadena de caracteres es un entero válido. Esta es una forma alternativa de validar la entrada del usuario.
El fragmento de código anterior solo nos permite leer un número por
línea. En caso de que tengamos que procesar varios número en la misma
línea, la forma más sencilla de proceder es creando un nuevo
Scanner y utilizando los métodos
hasNextInt().
Alternativamente, podemos partir la cadena de entrada utilizando el
método split y convirtiendo cada una de las cadenas de
forma individual, lo cual requiere bastante más código. Algo como
esto:
String line = scanner.nextLine();
String[] tokens = line.trim().split("\\s+");
for (int i = 0; i < tokens.length; i++) {
try {
numero = Integer.parseInt(tokens[i]);
} catch (NumberFormatException e) {
System.out.println("'" + tokens[i] + "' is not a valid integer.");
break;
}
}Por otra parte, esta forma de proceder nos da control total sobre la forma de interpretar la entrada del usuario sin añadir una complicación excesiva.
SUMARIO
- En Java la entrada de usuario se recibe como una cadena de
caracteres ya sea a través de
System.ino de un objetoString - La clase
Scannernos permite extraer distintos tipos de datos de la entrada de usuario de forma muy sencilla - La clase
Scannerofrece métodos para validar el siguiente dato en el flujo de entrada antes de leerlo.
■
