Anda di halaman 1dari 6

Clase escner

La clase del escner es una clase en java.util , que permite al usuario leer los valores de varios tipos. Hay muchos ms mtodos de la clase escner de lo que va a necesitar en este curso. Nosotros slo cubrimos un pequeo subconjunto til, los que nos permiten leer los valores numricos de el teclado o archivo sin tener que convertirlos de cuerdas y determinar si hay ms valores que se deben leer.

Constructores de clase
Hay dos constructores que son particularmente tiles: se toma un InputStream objeto como un parmetro y el otro lleva un FileReader objeto como un parmetro.
Escner en = new escner (System.in); / / System.in es un InputStream Escner INFILE = new escner (nueva FileReader ("myFile"));

Si el archivo myFile no se encuentra, una FileNotFoundException se produce. Esta es una excepcin comprobada, por lo que debe ser capturado o se reenva al poner el frase lanza FileNotFoundException en la cabecera del mtodo en el que se produce la creacin de instancias y la cabecera de cualquier mtodo que llama al mtodo en el que se produce la creacin de instancias.

Mtodos numricos y de cadena


Mtodo nextInt int () Devoluciones

largo nextLong ()

flotar nextFloat ()

duplicar NextDouble ()

Cadena next ()

Cadena nextLine () void close ()

Devuelve el siguiente token como un int . Si el siguiente token no es un entero, InputMismatchException es lanzada. Devuelve el siguiente token como siempre . Si el siguiente token no es un entero, InputMismatchException es lanzada. Devuelve el siguiente token como un float . Si el siguiente token no es un flotador o est fuera de rango,InputMismatchException es lanzada. Devuelve el siguiente token como siempre . Si el siguiente token no es un flotador o est fuera de rango,InputMismatchException es lanzada. Encuentra y devuelve el siguiente token completo de este scanner y lo devuelve como una cadena, un token se sola terminar por espacios en blanco, como una rotura o una lnea en blanco. Si no existe razn, NoSuchElementException es lanzada. Devuelve el resto de la lnea actual, sin incluir el separador de lnea al final. Cierra el escner.

El escner busca tokens en la entrada. Un smbolo es una serie de caracteres que termina con lo que Java llama a los espacios en blanco . Un carcter de espacio en blanco puede ser un espacio en blanco, un tabulador, un retorno de carro, o el final del archivo. Por lo tanto, si leemos una lnea que tiene una serie de nmeros separados por espacios en blanco, el escner har cada nmero como una muestra separada . Aunque slo hemos demostrado cuatro mtodos numricos, cada tipo de datos numrico tiene un mtodo correspondiente que lee valores de esa tipo. Los valores numricos pueden ser todos en una lnea con espacios en blanco entre cada valor o pueden estar en lneas separadas. Whitespace caracteres (espacios en blanco y retornos de carro) actan como separadores. El siguiente mtodo devuelve el siguiente valor de entrada como una cadena, independientemente de lo que est introducido . Por ejemplo, dado el siguiente segmento de cdigo y de datos
int numero = in.nextInt (); flotar verdadera in.nextFloat = (); largo nmero2 = in.nextLong (); doble real2 = in.nextDouble (); String String = in.next (); 44 23 2222222222 22.222,33 End

44 se almacenar en el nmero ; 23.0 se almacenar en verdad ; 2,222,222,222 se almacenar en nmero2 ; 22.222,33 seran almacenados en real2 y End se almacenar en la cadena . Observe que el mtodo nextFloat lee un entero y lo almacena comoflotar valor. Esto es legal porque un valor entero se puede almacenar exactamente como un valor real, no hay ambigedad. Si hubiramos introducido un punto decimal despus del 44 , el sistema habra arrojado una InputMismatchException (a excepcin comprobada), independientemente de si o no un valor distinto de cero seguido del punto decimal. Un nmero real arbitrario no se puede almacenar exactamente como un nmero entero, es ambigua. Recuerde que nada ambigua es ilegal. nextLine lee el resto de la lnea y la devuelve como una cadena. El retorno de carro se consume pero no se agrega a la cadena. Las lecturas numricas no consumen el espacio en blanco, as que si un nextLine se emite despus de una lectura numrica y la numrica valor est en el extremo de la lnea, nextLine devuelve la cadena vaca. nextLine nunca salta sobre un retorno de carro para conseguir la siguiente lnea de entrada. Por ejemplo, el siguiente fragmento de cdigo
int numero = in.nextInt (); String String = in.nextLine (); flotar verdadera in.nextFloat = (); Cadena cadena2 = in.nextLine ();

y los datos mostrados anteriormente, cadena contendran 23 y cadena2 contendra la cadena vaca. Este es un programa que utiliza estos mtodos, seguido de la salida. Revise cuidadosamente la solicitud para asegurarse de que entiende cmo se gener la salida. / / ************************************************ **********************

/ / Clase NumericInput demuestra la lectura de los valores numricos. / / ************************************************ ********************** importar java.util.Scanner; importacin ; java.io. * System.out / / Acceso pblico de clase NumericInput { pblicas estticas void (String [] args) { / / Declaraciones Escner de = nuevo escner (System.in); int entero; largo LongInteger; flotar realNumber; doble doubleReal; Cadena cadena1; Cadena cadena2; / / Solicita System.out.println ( largo," + System.out.println ( + System.out.println ( blanco o el regreso." ); "Introduzca un nmero entero, un entero "a punto flotante" ); "Nmero, otro nmero de punto flotante" "y una cadena." ); "separada cada una con un espacio en

/ / Leer los valores entero = in.nextInt (); LongInteger in.nextLong = (); realNumber in.nextFloat = (); doubleReal in.nextDouble = (); cadena1 = in.nextLine (); System.out.println ( "Ahora introduzca otro valor." ); texto2 = in.next (); System.out.println ( "Esto es lo que entr:" ); System.out.println (entero + "" + LongInteger + "" + realNumber + "" + doubleReal + "" + cadena1 + "Y" + cadena2); } } Salida: Introduzca un nmero entero, un entero largo, una coma flotante nmero, otro nmero de punto flotante, y una cadena. Separe cada uno con un espacio en blanco o el regreso. 23 24 25.0 233,333,333,333,333.444 Hola

A continuacin, introduzca otro valor. 23.4 Aqu est lo que entr: 23 24 25,0 2.3333333333333344E14 Hola y 23.4

Mtodos booleanas
Dijimos que los escner mtodos que leen datos numricos arrojan un InputMismatchException excepcin si la prxima isnt valor lo que el mtodo espera. Podemos evitar este problema utilizando mtodos booleanos. Aqu hay cuatro mtodos booleanos tiles que nos permiten hacer el registro para asegurarse de que el siguiente valor es lo que esperamos.
Mtodo booleano hasNextLine () Devoluciones

Devuelve verdadero si el escner dispone de otra lnea en su entrada; false de lo contrario. booleano hasNextInt () Devuelve verdadero si el prximo token en el escner puede ser interpretada como un int valor. booleano hasNextFloat Devuelve true si el prximo toke en el escner se () puede interpretar como un float valor. Vamos a escribir un fragmento de cdigo que crea una instancia de un escner y lee e imprime un valor entero y un segundo valor entero si es que existe.
Escner de = nuevo escner ( System.in); System.out.println (in.nextInt ()); si (in.hasNextInt ()) System.out.println (in.nextInt ());

Hay mtodos equivalentes a los mismos para cada uno de los tipos incorporado en Java . La siguiente aplicacin se aplica el mtodo de lectura apropiado a los datos que est dirigida pulg / / ************************************************ ************************ / / MixedTypeInput / / Esta aplicacin muestra las pruebas antes de leer para ser / / Asegrese de utilizar el mtodo de introduccin correcta de los datos. / / ************************************************ ************************ import java.io. *; importar java.util.Scanner; pblico de clase MixedTypeInput { pblicas estticas void (String [] args) { doble nmero; Escner de = nuevo escner (System.in); System.out.println ( "Ingrese su ingreso bruto:" ); si (in.hasNextInt ())

{ nmero = ( double ) in.nextInt (); System.out.println ( "Ha introducido" + nmero); } ms si (in.hasNextFloat ()) { nmero = ( double ) in.nextFloat (); System.out.println ( "Ha introducido" + nmero); } ms si (in.hasNextDouble ()) { nmero in.nextDouble = (); System.out.println ( "Ha introducido" + nmero); } ms System.out.println ( "token no es un entero o un valor real." ); } }
La aplicacin se llev a cabo en cuatro ocasiones. La entrada se muestra en rojo.

Anote su ingreso bruto: 55000 Ha introducido 55.000,0 Anote su ingreso bruto: 55000.0 Ha introducido 55.000,0 Anote su ingreso bruto: 55E10 Ha introducido 5.50000001024E11 Anote su ingreso bruto: Fifty Five Hundred Token no es un entero o un valor real.

Qu pasara si no hubiera un token en el archivo en el ejemplo anterior? Cada uno de los booleanos mtodos volvera falsa . Vuelven verdadera si y slo si el siguiente token en el escner se puede interpretar como un valor de su tipo. Volvemos al tema de la lectura de los datos de los archivos ms adelante en este captulo y mostramos cmo utilizar estos escner mtodos para permitir que leamos mltiples valores de una lnea en un archivo. Salvo algunos casos triviales, debemos combinar las operaciones de lectura con

bucles para leer todos los datos en un archivo. Archivos


Para leer de un archivo en lugar del teclado, crear instancias de un escner objeto con un FileReader objeto en lugar de System.in .

Escner de = new escner (System.in); / / Lectura desde el teclado Escner INFILE = new escner ( new FileReader ( archin.dat )) / / Lectura de un archivo

Aunque todos los mtodos aplicados a la entrada del teclado se puede aplicar a la entrada del archivo, hay mtodos que se aplican normalmente slo a los archivos. Estos son los mtodos que preguntan de que hay ms valores en el archivo. Si no hay ms valores en un archivo, se dice que el archivo se encuentra al final del archivo (EOF). Por ejemplo,
inFile.hasNext (); inFile.hasNextLine ();

devolver verdadero si INFILE tiene otra ficha en el archivo o si hay otra lnea en el archivo. Y el mtodos hasNextInt y dems que utilizamos para mirar hacia el futuro en el tipo del prximo token de entrada? Estos pueden ser usados para determinar si hay ms valores de datos en el archivo, siempre que sepa exactamente cmo se organizan los archivos Asegrese de cerrar todos los archivos. Si se olvida de cerrar System.in , no se haga dao, pero olvidndose de cerrar un archivo puede causar problemas.

Anda mungkin juga menyukai