Вы находитесь на странице: 1из 10

13 Ms Siguiente blog Crear un blog Acceder

Programacin Java Buscar


Tutorial Java. Aprende a programar con Java desde cero.

ltima entrada Teora Ejercicios Ejercicios POO C++


ENTRADAS POPULARES

Java Scanner para lectura de datos Java Scanner para lectura de datos
La clase Scanner est disponible a
partir de Java 5 y facilita la lectura de
Su experto- en
Llmenos lo ayudaremos
anuncios online
a encontrar
est a datos en los programas Java.
Primero veremos varios ejemplos...
Regstrese hoy
la estrategia
un llamado depara
distancia.
el xito.
Matrices en Java
Un array en Java
puede tener ms de
La clase Scanner est disponible a partir de Java 5 y facilita la lectura de datos en los programas Java. una dimensin. El
caso ms general son
Primero veremos varios ejemplos de lectura de datos en Java con Scanner y despus explicaremos en detalle como los arrays
funciona. bidimensionales tambin llamados
matrices o tablas ....
Para utilizar Scanner en el programa tendremos que hacer lo siguiente:
Ejemplos de Expresiones Regulares
1. Escribir el import
en Java
La clase Scanner se encuentra en el paquete java.util por lo tanto se debe incluir al inicio del programa la instruccin: Una expresin regular define un
patrn de bsqueda para cadenas de
import java.util.Scanner; caracteres. La podemos utilizar para
comprobar si una cadena contiene ...
2. Crear un objeto Scanner
Java ArrayList.
Tenemos que crear un objeto de la clase Scanner asociado al dispositivo de entrada.
Estructura dinmica
Si el dispositivo de entrada es el teclado escribiremos: de datos
DECLARACIN Y
Scanner sc = new Scanner(System.in); CREACIN DE UN
ARRAYLIST De forma
Se ha creado el objeto sc asociado al teclado representado por System.in general un ArrayList en Java se crea
de la siguiente forma: ArrayList
Una vez hecho esto podemos leer datos por teclado. nombreArray = new...
Ejemplos de lectura:
Java Ejercicios Bsicos Resueltos 2
Para leer podemos usar el mtodo nextXxx() donde Xxx indica en tipo, por ejemplo nextInt() para leer un entero, Java Ejercicios Bsicos estructura
secuencial Relacin N 2: Ejercicios
nextDouble() para leer un double, etc.
4, 5, 6 y 7 Ejercicio 4: Programa que
lea una cantidad de grados c...

Ejemplo de lectura por teclado de un nmero entero: Java Ejercicios Bsicos de Arrays
Resueltos 1
int n; Relacin N 1: Ejercicios 1 y 2 1.
System.out.print("Introduzca un nmero entero: "); Calcular la media de una serie de
n = sc.nextInt(); nmeros que se leen por teclado.
Programa Java que lea por teclado ...

Mtodos en Java
Ejemplo de lectura de un nmero de tipo double:
Un mtodo en Java es un conjunto
double x; de instrucciones definidas dentro de
una clase, que realizan una
System.out.print("Introduzca nmero de tipo double: "); determinada tarea y a las que
x = sc.nextDouble(); podemos...

Mayor de tres numeros


Ejemplo de lectura de una cadena de caracteres: Calcular el mayor de tres nmeros
enteros en Java. El programa lee por
String s; teclado tres nmeros enteros y
calcula y muestra el mayor de los...
System.out.print("Introduzca texto: ");
s = sc.nextLine();
Java Ejercicios Bsicos Resueltos 1
Relacin N 1: Ejercicios 1, 2 y 3
Empezaremos por unos ejercicios
Ejemplo de programa Java con lectura de datos con Scanner: bsicos de programas Java con
estructura secuencial, es decir, en
El programa pide que se introduzca el nombre de la persona y lo muestra por pantalla. A continuacin lee por teclado el estos...
radio de una circunferencia de tipo double y muestra su longitud. Adems lee un entero y muestra su cuadrado.
Mostrar la tabla de multiplicar de un
nmero en Java
import java.util.Scanner; Programa Java que lea un nmero
public class Main { entero N y muestre la tabla de
multiplicar de ese nmero. Por
public static void main(String[] args) { ejemplo, si se lee el valor 7 se
Scanner sc = new Scanner(System.in); //crear un objeto Scanner mostrar por...
String nombre;
double radio;
int n;
System.out.print("Introduzca su nombre: ");
nombre = sc.nextLine(); //leer un String
System.out.println("Hola " + nombre + "!!!"); Programacin Java
System.out.print("Introduzca el radio de la circunferencia: ");
radio = sc.nextDouble(); //leer un double
TRANSLATE
System.out.println("Longitud de la circunferencia: " + 2*Math.PI*radio);
System.out.print("Introduzca un nmero entero: ");
Seleccionar idioma
n = sc.nextInt(); //leer un entero
System.out.println("El cuadrado es: " + Math.pow(n,2));
} SEGUIDORES

}
Participar en este sitio
Google Friend Connect

Miembros(85) Ms

Funcionamiento la clase Java Scanner.


De forma resumida podemos decir que cuando se introducen caracteres por teclado, el objeto Scanner toma toda la
cadena introducida y la divide en elementos llamados tokens.
El carcter predeterminado que sirve de separador de tokens es el espacio en blanco.
Ya eres miembro? Iniciar sesin
Por ejemplo, si introducimos:
Esto es un ejemplo, lectura de datos.
LENGUAJE C++
Scanner divide la cadena en los siguientes tokens:
Esto Programacion C++
Estructuras de Control en C++
es
un
ejemplo,
lectura
de
datos.

Si introducimos la cadena:

12 20.001 Lucas w

Los tokens que se crean son:

12
20.001
Lucas
w

A continuacin, utilizando los mtodos que proporciona la clase Scanner se puede acceder a esos tokens y trabajar con
ellos en el programa.

Ya hemos visto el mtodo nextXxx(). Adems la clase Scanner proporciona otros mtodos, algunos de los mtodos ms
usados son:

METODO DESCRIPCIN
nextXxx() Devuelve el siguiente token como un tipo bsico. Xxx es el tipo. Por
ejemplo, nextInt() para leer un entero, nextDouble para leer un double,
etc.
next() Devuelve el siguiente token como un String.
nextLine() Devuelve la lnea entera como un String. Elimina el final \n del buffer
hasNext() Devuelve un boolean. Indica si existe o no un siguiente token para
leer.
hasNextXxx() Devuelve un boolean. Indica si existe o no un siguiente token del tipo
especificado en Xxx, por ejemplo hasNextDouble()
useDelimiter(String) Establece un nuevo delimitador de token.

Cmo limpiar el buffer de entrada en Java


Cuado en un programa se leen por teclado datos numricos y datos de tipo carcter o String debemos tener en cuenta que
al introducir los datos y pulsar intro estamos tambin introduciendo en el buffer de entrada el intro.

Es decir, cuando en un programa introducimos un datos y pulsamos el intro como final de entrada, el carcter intro
tambin pasa al buffer de entrada.

Buffer de entrada si se introduce un 5: 5\n


En esta situacin, la instruccin:

n = sc.nextInt();

Asigna a n el valor 5 pero el intro permanece en el buffer


Buffer de entrada despus de leer el entero: \n

Si ahora se pide que se introduzca por teclado una cadena de caracteres:

System.out.print("Introduzca su nombre: ");


nombre = sc.nextLine(); //leer un String

El mtodo nextLine() extrae del buffer de entrada todos los caracteres hasta llegar a un intro y elimina el intro del buffer.
En este caso asigna una cadena vaca a la variable nombre y limpia el intro. Esto provoca que el programa no funcione
correctamente, ya que no se detiene para que se introduzca el nombre.

Solucin:

Se debe limpiar el buffer de entrada si se van a leer datos de tipo carcter a continuacin de la lectura de datos
numricos.

La forma ms sencilla de limpiar el buffer de entrada en Java es ejecutar la instruccin:

sc.nextLine();

Lo podemos comprobar si cambiamos el orden de lectura del ejemplo y leemos el nombre al final:

import java.util.Scanner;
public class JavaApplication335 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String nombre;
double radio;
int n;
System.out.print("Introduzca el radio de la circunferencia: ");
radio = sc.nextDouble();
System.out.println("Longitud de la circunferencia: " + 2*Math.PI*radio);
System.out.print("Introduzca un nmero entero: ");
n = sc.nextInt();
System.out.println("El cuadrado es: " + Math.pow(n,2));
System.out.print("Introduzca su nombre: ");
nombre = sc.nextLine(); //leemos el String despus del double
System.out.println("Hola " + nombre + "!!!");
}
}

Si lo ejecutamos obtendremos:
Introduzca el radio de la circunferencia: 34
Longitud de la circunferencia: 213.62830044410595
Introduzca un nmero entero: 3
El cuadrado es: 9.0
Introduzca su nombre: Hola !!!

Comprobamos que no se detiene para pedir el nombre.


La solucin es escribir la instruccin
sc.nextLine();
despus de la lectura del int y antes de leer el String:

import java.util.Scanner;
public class JavaApplication335 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String nombre;
double radio;
int n;
System.out.print("Introduzca el radio de la circunferencia: ");
radio = sc.nextDouble();
System.out.println("Longitud de la circunferencia: " + 2*Math.PI*radio);
System.out.print("Introduzca un nmero entero: ");
n = sc.nextInt();
System.out.println("El cuadrado es: " + Math.pow(n,2));
sc.nextLine();
System.out.print("Introduzca su nombre: ");
nombre = sc.nextLine();
System.out.println("Hola " + nombre + "!!!");
}
}

Ahora la ejecucin es correcta:


Introduzca el radio de la circunferencia: 23
Longitud de la circunferencia: 144.51326206513048
Introduzca un nmero entero: 5
El cuadrado es: 25.0
Introduzca su nombre: Lucas
Hola Lucas!!!

Si quieres ver ms ejemplos de entrada de datos en Java con Scanner los tienes en este enlace Ejercicios Bsicos en Java

Si te ha sido til comprtelo


Tweet 13 Me gusta 88

62 comentarios:

Annimo 16 de julio de 2013, 6:36

Buen Post!

Responder

Annimo 8 de agosto de 2013, 21:22

lol

Responder

Annimo 3 de septiembre de 2013, 22:36

Excelente!!!!1, me ayudo bastante


Responder

Annimo 6 de septiembre de 2013, 4:52

6R3/\7

Responder

Annimo 9 de septiembre de 2013, 5:19

~Me ayudo mucho en esto muchas gracias^^

Responder
Enrique 17 de septiembre de 2013, 22:39

Gracias. Me alegro de que os sea til.

Responder

Respuestas

Annimo 15 de octubre de 2015, 3:49

excelenteeeeee !! gracias por este aporte

Juan Pablo Barrera 6 de noviembre de 2015, 19:10

explicas mejor que mi profesor :v

Annimo 29 de diciembre de 2015, 20:04

que tal para poder limpiar la consola, he utilizado getRuntime, el System.out.print("\033[H\033[2J");


System.out.flush(); y nada alguna otra solucion

Annimo 26 de enero de 2016, 0:07


como ago para desarrolar un programa que permita leer el nombre de una persona y como resultado muestre u
saludo

Responder

yan carlos 19 de septiembre de 2013, 16:20

ayudenme

Responder

Annimo 19 de septiembre de 2013, 22:35

Muchas gracias!

Ese ".nextLine()" despus de un ".nextInt()" me ha salvado de implementar soluciones ms originales ;-)

Responder

Mario 20 de septiembre de 2013, 22:19

Pff!! tienes talentoo para esto! nunca v un Blog como este! sigue as, pon ms temas por fa (:

Responder

Annimo 26 de septiembre de 2013, 18:31

no me ayudo en nada! -.-

Responder

Respuestas

Annimo 30 de octubre de 2013, 18:59

por pendejo!!! y me vale madres... .l.(-.-).l.

Responder

Annimo 26 de septiembre de 2013, 18:32


Esta pagina es un asco!

Responder

Annimo 13 de octubre de 2013, 20:06

Muy buena informacion,,, buen apunte...

Responder
Annimo 17 de octubre de 2013, 23:06

Hola gracias por la informacin. Tengo una duda en que casos hay la necesidad de usar ms de un objeto Scanner.

Responder

Respuestas

Enrique 24 de octubre de 2013, 13:08

Por ejemplo, cuando vas a leer datos por teclado y adems quieres leer el contenido de un fichero de texto.
Puedes usar un objeto Scanner para cada cosa.

Responder

Annimo 4 de noviembre de 2013, 21:05

y no hay ningun metodo como sc.nextChar();???

Responder

ALAN ROSE 14 de noviembre de 2013, 19:34


SE AGRADECE.. GENIAL !!

Responder

Carlos J. Garca Carmona 18 de noviembre de 2013, 12:55

Gracias por la info.

Responder

Andrs Mayor 30 de noviembre de 2013, 7:00

Gracias, tena problemas con un nextLine() que al parecer no se ejecutaba, con esta info lo pude resolver.

Responder

melisa 14 de diciembre de 2013, 19:42


como hago usando la clase scanner , por ejemplo , para Imponerle que me ponga tal nombre , y que la persona no lo elija ?

Responder

otakusactivos 23 de diciembre de 2013, 2:14


Excelente amigo de verdad gracias muy buena explicacion!
Responder

Irving Rodriguez 31 de diciembre de 2013, 21:36


PORQUE AL REALIZAR ESTO:
System.out.print("Introduzca su nombre: ");
nombre = sc.nextLine();
System.out.println("Hola " + nombre + "!!!");

Y AL IMPRIMIR nombre no me imprime la letra ?

Responder

Respuestas

Annimo 1 de octubre de 2015, 19:35


porque es de caracter especial

Responder

Annimo 3 de enero de 2014, 3:35


muy buen post gracias muchacho Dios te bendiga y te siga dando conocimiento para compartir fue de gran ayuda (:
Responder
Annimo 6 de marzo de 2014, 3:28
Bien!!!!!
Responder

Annimo 17 de marzo de 2014, 22:02


Gracias me ha servido de mucho...

Responder

Enrique 22 de marzo de 2014, 14:49


Muchas gracias por los comentarios, espero que os haya servido de ayuda para poder entender mejor el funcionamiento de
la clase Scanner

Responder

Annimo 3 de abril de 2014, 20:58

GRACIASSSSSSSSSSSS mas que util


Responder

Francisco Vizcaya 15 de abril de 2014, 15:14


hola como puedo hacer si quiero hacer un ciclo para introducir 10 datos de personas con for y al comenzar la 2da vuelta me
salta la segunda linea y evita introducir el nombre nuevamente? gracias

System.out.println("Enter the Name of your " + i + " Seller: ");


seller[i] = keyboard.nextLine();
System.out.println("Enter your Sex('F' Female or 'M' Male: ");
sex[i] = keyboard.next().charAt(0);
System.out.println("How many T-shirt have the person sold?: ");
tshirt[i] = keyboard.nextInt();
quien tenga info acerca de este sera bien recibida,
gracias.

Responder

Respuestas

Annimo 2 de junio de 2015, 17:06


Yo creo que no le pondra el nextLine sino solo next(); porque seller debe ser string no?

Enrique 2 de junio de 2015, 18:37


Si en el campo seller se lee nombre y apellido separado por espacio, next() solo obtiene el nombre dejando el
apellido para elo siguiente next(). seller hay que leerlo con nextLine(). La solucin paralo que planteas es escribir
la instrucin keyboard.nextLine(); justo despus de la instruccin
tshirt[i] = keyboard.nextInt();
La explicacin la tienes en esta entrada en el apartado: como limpiar el buffer en Java

Responder

Daniel Marcos Benjamn Gonzalo 7 de mayo de 2014, 23:10

Grande!!! Me ayud mucho ya que estaba leyendo datos y strings y no entenda por qu se saltaba el string :-D
Responder

Respuestas

Enrique 30 de mayo de 2014, 20:49


Daniel me alegro de que te haya servido de ayuda. A ti y a los dems que tambin han comentado antes que
tenan el mismo problema de lectura. Es algo que nos ha pasado a todos y hasta que no lo descubres es muy
frustrante porque en apariencia el cdigo est bien pero la lectura no se hace de forma correcta.
Un saludo y espero que sigas visitando el blog

Responder

Dery Ariza 3 de junio de 2014, 23:05

hola muy buen post, oye tengo una duda cuando se usa br en cambio de sc para que es??
Responder

JUAN FELIPE GAMA MEDINA 16 de junio de 2014, 4:42


gracias por tu explicacion esta muy completa me sirvio mucho

Responder

Yovan Rojas 20 de junio de 2014, 0:28

buenaa me yudooo
Responder

Annimo 9 de septiembre de 2014, 6:41

en el double x; que declaraste , no lo usaste bien, es x.sc.nextDouble(); / y no n.sc.nextDouble();


declaraste "x" para el double , no "n" ese era del int del ejemplo de arriba del double
Responder

Respuestas

Enrique 11 de septiembre de 2014, 9:51


Gracias por avisar, ya est corregido. Cosas del Copy-Paste

Responder

Annimo 16 de octubre de 2014, 20:58


Para evitar escribir una lnea de ms (sc.nextLine()), simplemente hacemos la lectura con next, es decir:

nombre=sc.next();

Responder

Annimo 28 de octubre de 2014, 21:56


en efecto haciendo nombre=sc.next(); funciona y no hay que hacer limpieza.

Responder

Respuestas

Enrique 28 de octubre de 2014, 22:50


El problema de leer con next() es que si se introduce ms de una palabra solo se toma la primera.

Annimo 5 de enero de 2015, 12:41


Eres el unico que me a podido explicar con claridad el Scanner gracias ni mi profesora de programacion sabe
explicarla con bien solo da un papel con trabajo y que se encomiende uno a Dios porque tiene que sacarsela de
la manga .

Enrique 8 de enero de 2015, 7:13


Me alegro de que te haya servido de ayuda. Gracias por seguir el blog ;)

Responder

Annimo 11 de febrero de 2015, 17:36


Has resuelto la duda exacta que tenia con esta clase. Gracias

Responder

Annimo 25 de marzo de 2015, 11:10

Otra opcin (para el problema con los nextInt() ) sera usar por ejemplo:
int x = Integer.parseInt(sc.nextLine());
De esta forma te lee la linea entera (descartando el retorno de carro) y te lo transforma a un int.
Responder
Aaron muoz 31 de mayo de 2015, 2:33
si declaro una variable int, y en la consola se me pide un entero; pero si escribo cualquier otra cosa me truena el programa,
metiendole un try- catch me permite correrlo pero se para el programa, si yo quisiera meterlo en un ciclo y terminar el
programa hasta que se me ingrese un entero. cmo podria hacerlo? algna pista? Gracias.
Responder

Respuestas

Enrique 2 de junio de 2015, 18:42

puedes hacerlo con un do .. while


boolean repetir;
do{
try{
repetir = false;
System.out.print("Introduce un nmero entero: ");
n = sc.nextInt();
System.out.println("Nmero introducido: " + n);
}catch(InputMismatchException e){
sc.nextLine();
repetir = true;
System.out.println("Debe introducir un nmero entero " + e.toString());
}
}while(repetir);

Aaron muoz 30 de septiembre de 2015, 19:09


muchas gracias por la ayuda =)

Enrique 1 de octubre de 2015, 18:45


De nada Aaron, espero que te sirva. Saludos

Responder

Juan Luis Jimenez 22 de agosto de 2015, 14:21


Genial y muy aclaratorio.

Responder

Respuestas

Enrique 1 de octubre de 2015, 18:41


Gracias Juan Luis. Espero que te haya sido til.

Responder

Annimo 8 de septiembre de 2015, 22:10

Buen aporte. Gracias!


Responder

Unknown 12 de septiembre de 2015, 20:01


tengo unas dudas donde te puedo contactar?
Responder

Adrian E. 26 de septiembre de 2015, 18:33


Excelente aporte sinceramente [^^] Noob to java Here xd

Responder

Respuestas

Enrique 1 de octubre de 2015, 18:43


Gracias Adrian, en nada de noob to pro xd

Responder
Unknown 14 de octubre de 2015, 13:53

q la fuerza del pan te acompae a todos lados


Responder

Andres 29 de diciembre de 2015, 20:10


Que tal estoy utilizando la clase Scanner pero quiero limpiar la pantalla; he utilizado Runtime.getRuntime().exec(), el
System.out.print("\033[H\033[2J");System.out.flush();
y nada alguna otra solucion saludos

Responder

Annimo 13 de mayo de 2016, 23:18


1. Solicite al usuario la temperatura mxima del mes y la temperatura medida hoy, actualice el valor de la temperatura
mxima si la temperatura leda hoy es mayor que la temperatura mxima.

Responder

Aadir comentario

Introduce tu comentario...

Comentar como: Unknown (Google) Salir

Publicar Vista previa Avisarme

Entrada ms reciente Pgina principal Entrada antigua

Suscribirse a: Enviar comentarios (Atom)

LICENCIA

Programacin Java by Enrique Garca Hernndez


Esta obra est bajo una licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Espaa License.
Para reconocer la autora debes poner el enlace http://puntocomnoesunlenguaje.blogspot.com.es

Con la tecnologa de Blogger.

Вам также может понравиться