LABORATORIO DE FLUJO DE DATO Pertenece a: Noriel Madrid Cedula: 8-777-2199 1. Pruebe el ejemplo y verifique su funcionamiento. ¿Cuál es el objetivo del programa? Incluya un comentario que describa el trabajo del programa. Ejemplo # 1: a. Primeramente para que compile correctamente debe importarse el paquete java.io.* ya que en el se encuentran las clase que se emplean para la captura de datos desde teclado. El asterico indica que se tiene acceso a todas las clases de primer nivel del paquete. b.
La entrada de dato se efectúo mediante la lectura de byte. A través de la clase InputStreamReader asociado con el objeto System.in, transformó los bytes a caracteres sueltos y se lo asignó a el objeto isr que se creo. InputStreamReader isr = new InputStreamReader(System.in);
a. La siguiente clase que se uso fue BufferedReader, se encarga de capturar la línea o cadena del objeto isr y lo almacena en la variable br. BufferedReader br = new BufferedReader (isr); b.
Por medio del método readLine() se lee la línea o cadena completa de teclado, devolviéndonoslos de tipo String y se lo asigna a la variable texto1 y texto2. String texto1=br.readLine(); String texto2=br.readLine();
c. Como los resultados deben ser de tipo entero y están de tipo cadena (texto1, texto2), se hizo uso del método parseInt para que los convirtiera a valores entero. Asignándoselo a la variable num1 y num2. int num1=Integer.parseInt(texto1); int num2=Integer.parseInt(texto2); e. Como ultimo paso se imprimió los dos números enteros junto con el resultado de la suma de los dos. System.out.println (num1+num2));
("Suma
de
"+num1+"
y
"+num2+"
es
"+
Ejemplo # 2: a. Se realizó una modificación en el problema, eliminando la parte de convertir a entero y la que imprimía los números enteros. Se coloco una parte que me imprimiera solo las líneas leídos por el teclado (texto1 y texto2). String texto1=br.readLine(); String texto2=br.readLine(); System.out.println(texto1); System.out.println(texto2); Ejemplo #3: a. Como tercera modificación en vez de que me transformara de String a Integer lo hice que me lo transformara a Float. Para convertir un string en número decimal (double) se requieren dos pasos: convertir el string en un objeto de la clase envolvente Double, mediante la función miembro estática valueOf, y a continuación convertir el objeto de la clase Double en un tipo primitivo double mediante la función doubleValue. Una vez convertido fue asignado a la variable num1 y num2 y obteniendo la suma como numero flotante. double num1=Double.valueOf(texto1).doubleValue(); double num2=Double.valueOf(texto2).doubleValue(); El objetivo principal del programa es de obtener el resultado de la suma de dos valores que son introducidos desde el teclado. 2. Compile el programa anterior sin usar throws IOException. ¿Qué ocurrió? ¿Qué método se asoció al error producido? R/ Al compilar el programa sin declarar la excepción throws IOException al compilarlo se presento tres errores en la lectura de los caracteres. El método asociado al error fue readLine(). 3. Analice el programa anterior, identifique clases, objetos y métodos. Clases: • FlujoTeclado • InputStreamReader • BufferedReader. Objeto: • br • isr • System.in. Metodo: • readLine() • parseInt.
4. Coloque nuevamente throws IOException y provoque un error introduciendo una letra como segundo valor capturado. ¿Qué ocurrió? R/ Si en la segunda opción donde no pide que se Teclea el segundo numero se introduce un carácter (j) en vez de valor entero el sistema muestra una excepción "NumberFormatException" para la cadena "j", es decir, que no puede obtener el número a partir de "j". En la última línea, vemos que el error se produce en la línea 20 del fichero FlujoTeclado.java, en el método main(). El
5. Considere el siguiente ejemplo y provoque nuevamente un error: ¿Cuál fue la diferencia? import java.io.*; public class FlujoTeclado{ public static void main(String args[])throws IOException{ try { //Creación del flujo para leer datos - caracteres InputStreamReader isr=new InputStreamReader(System.in); //Creación del filtro para leer cadena de caracteres BufferedReader br=new BufferedReader(isr); System.out.print("Teclea el primer numero: "); //Lectura de datos mediante el método readLine() String texto1=br.readLine(); //Conversión a int de la String anterior para poder sumar int num1=Integer.parseInt(texto1); System.out.print("Teclea el segundo numero: "); String texto2=br.readLine(); int num2=Integer.parseInt(texto2); //Sumar los dos enteros System.out.println ("Suma de "+num1+" y "+num2+" es "+ (num1+num2)); } catch(Exception e) { System.out.println( "Error en la captura****" ); } } //fin del main } R/ Al realizar el mismo error que en el problema anterior se diferencia porque las excepciones es manejado a través del bloque catch ya que contendrá el
código necesario para gestionar ese tipo específico de error. En este caso mando el mensaje que dice: “error en la captura***”. 6. Reflexione sobre la utilidad del manejo de las excepciones con el try … catch. ¿Qué entendió como excepción?¿Cuál es la función del try y cuál la del catch? ¿En qué referencia se apoyó? R/ Excepción es sencillamente problemas. En la programación siempre se producen errores, más o menos graves, pero que hay que gestionar y tratar correctamente. Por ello en java disponemos de un mecanismo consistente en el uso de bloques try ... catch. La técnica básica consiste en colocar las instrucciones que podrían provocar problemas dentro de un bloque try, y colocar a continuación uno o más bloques catch, de tal forma que si se provoca un error de un determinado tipo, lo que haremos será saltar al bloque catch capaz de gestionar ese tipo de error específico. El bloque catch contendrá el código necesario para gestionar ese tipo específico de error. Suponiendo que no se hubiesen provocado errores en el bloque try, nunca se ejecutarían los bloques catch.