Unidad III Programación Orientada a Objetos en Java Programación Orientada a Objetos Programación I - 0416202
Contenido Esta lección abarca los siguientes temas con respecto a Java: Salida estándar Entrada estándar Entrada a través de Scanner Conversión de tipo de datos Bloques y ámbito Sentencia condicional if-else Sentencia condicional switch Operador ternario?: Ciclo while Ciclo do-while Ciclo for Ciclo for-each
Salida Estándar La salida estándar de Java permite mostrar por pantalla los resultados de las diversas operaciones que se realizan en un programa. La salida estándar es manejada a través de la clase System, que se encuentra en el paquete de clases java.lang El objeto System.out permite mostrar mensajes y resultados en la consola del sistema. Los métodos usados son: Método System.out.print (String); System.out.println (String); Descripción Muestra el texto en la consola Muestra el texto en la consola Y seguidamente efectúa un salto de línea.
Salida Estándar
Entrada Estándar La entrada estándar es manejada por la clase System, específicamente por el objeto System.in que permite leer de la consola de entrada ó teclado. Los métodos usados son: Método int System.in.read (); int System.in.read (byte [] b); Descripción Lee el siguiente byte (char) de la entrada estándar Lee un conjunto de bytes de la entrada estándar y lo almacena en el vector b Java a diferencia de Lenguaje C no usa caracteres de control para la lectura de datos.
Entrada Estándar
Entrada Estándar Para leer cadenas se debe utilizar unas clases de apoyo para almacenar y procesar la secuencia de caracteres que son introducidos por el teclado y son capturados por System.in.read. Para leer datos numéricos, la forma frecuentemente utilizada, es tomar la entrada en forma de cadena y usar algunos métodos que permitan su transformación. Las clases y métodos usados son:
Entrada Estándar Para leer una línea completa de texto se debe declarar un objeto lector de tipo BufferedReader bytes Clase BufferedReader Clase InputStreamReader System.in (InputStream) read() read(byte[]) int read() read(char[]) readline()
Entrada Estándar
Entrada Estándar
Entrada Estándar También se puede hacer sin la presencia de un buffer:
Entrada a través de Scanner El ingreso del teclado mediante el uso de un escáner requiere la siguiente sentencia de importación: java.util.scanner Para inicializar un Scanner, se utiliza: Scanner input = new Scanner(System.in); El Scanner facilita la lectura del ingreso del usuario, dado que ya contiene los métodos que realizan esta misma tarea. El método next() de Scanner lee el dato del usuario como un String y devuelve ese String. La línea de código sería: String nombre = input.next();
Entrada a través de Scanner Para ingresar diferentes tipos de datos a través del teclado, Scanner cuenta con los siguientes métodos (ver documentación para conocer los demás métodos): Método int nextint (); boolean hashnext (); double nextdouble (); void Close (); Descripción Esta función es similar a next() y lee el ingreso del usuario y devuelve su valor entero. Devuelve verdadero si el escáner tiene otro ingreso y falso, si ocurre lo contrario. Lee el ingreso del usuario y devuelve su valor como Double. Cierra el escáner.
Entrada a través de Scanner
Conversión de tipo de datos Para convertir una cadena de texto a un tipo de dato numérico, se pueden utilizar los siguientes métodos: Método byte Byte.parseByte(String) Descripción Convierte una cadena en un número entero de un byte short Short.parseShort(String) int Integer.parseInt(String) long Long.parseLong(String) float Float.parseFloat(String) double Double.parseDouble(String) boolean Boolean.parseBoolean(String) Convierte una cadena en un número entero corto Convierte una cadena en un número entero Convierte una cadena en un número entero largo Convierte una cadena en un número real simple Convierte una cadena en un número real doble Convierte una cadena en un valor lógico
Conversión de tipo de datos De Número a Carácter var_char = Character.forDigit(var_num, base); De Carácter a Número var_num = Character.digit(var_char, base); De Carácter a Cadena El char a convertir debe ser un objeto de la clase Character. Character objeto = new Character( letra ); var_string = objeto.tostring();
Conversión de tipo de datos De Número a Cadena El dato al que convertimos debe ser un objeto clase_num objeto = new clase_num(valor); var_string = String.valueOf(var_num); De Cadena a Número El dato al que convertimos debe ser un objeto clase_num objeto = new clase_num(var_string); var_num = objeto.tipovalue();
Conversión de tipo de datos Entre Números objeto de una clase numérica El dato a convertir debe ser un clase_num objeto = new clase_num(valor); var_tipo = objeto.tipovalue(); float F = new Float (3.1416); int i = F.intValue(); long l = F.floatValue(); double d = F.doubleValue();
Conversión de tipo de datos
Conversión de tipo de datos Casting ó Conversiones explícitas: Al hacer conversiones implícitas, la información se pierde, por tanto el programador debe verificar la asignación realizando un Casting. La asignación entre un long y un int requiere de un explícito casting. long valorlargo= 99L; int valorint = valorlargo; //Error int valorint = (int) valorlargo; //OK
Conversión de tipo de datos Asignaciones incompatibles: long valorlargo= 6; //OK int valorint = 99L; //Error double z = 12.414F; //OK float x= 12.414; //Error 12.414 es double
Conversión de tipo de datos También existen más métodos: Prueba crear un objeto de alguna de éstas clases para que te sorprendas de todas las cosas que puedes hacer con ellas. Por ejemplo: String objeto; //Declaración de un objeto de la clase String objeto. //Aquí debes ver todos los atributos y métodos que le proporcionó la clase String al objeto Entre los métodos de la clase String mas usados se encuentran: compareto( ) tolowercase() length() tostring() replace( ) touppercase() split( ) valueof( ) substring( ) Entre otros
Bloques y Ámbito En Java, el código fuente está dividido en partes separadas por signos de llave de apertura y de cierre { y }. Todo lo que está dentro de las llaves es considerado un bloque. Sin llaves el compilador tendría problemas para determinar donde termina una sección de código y dónde empieza la siguiente. El ámbito afecta el tiempo de vida de las variables, lo que quiere decir, que la variable solo se usa en esa parte determinada del programa.
Sentencia Condicional if-else Se utiliza para evaluar una condición lógica lógica y llevar a cabo una de dos posibles acciones, dependiendo del resultado de la condición (de que sea cierta o falsa). Sintaxis: if (condicion) //código a ejecutar si condición es true [ else //código a ejecutar si decisión es false ] Si hay mas de una instrucción a ejecutar, éstas deben ejecutarse entre llaves { }.
Sentencia Condicional if-else Para generar una sentencia if-else, recuerde las siguientes reglas: Una sentencia if-else necesita una condición o método que se prueba como verdadero/falso. Por ejemplo: If (x==5) If (y >= 17) If (s1.equals(s2))
Sentencia Condicional if-else También pueden ejecutarse toma de decisiones anidadas. Sintaxis: if (condicion1) Instrucciones a ejecutar si se cumple la condicion1; else if (condicion2) Instrucciones a ejecutar si se cumple la condicion2; else if (condicion3) Instrucciones a ejecutar si se cumple la condicion3; else Instrucciones a ejecutar si no se cumple ninguna de las condiciones anteriores La sentencia else if opcional, se puede probar así: else if (y==7) else if (z!= 2) La sentencia else opcional tendrá en cuenta cualquier otra posibilidad.
Sentencia Condicional if-else
Sentencia Condicional switch Una sentencia switch constituye otra manera de cambiar el flujo del programa dependiendo del valor de entrada. Una sentencia switch usa 3 palabras clave: switch, case y valor predeterminado. switch: especifica qué variable probar para ver el valor. case: compara el valor de la variable switch. default: cuando la entrada no coincide con ninguno de los casos, el compilador elije la acción predeterminada (como else en una lista de sentencias if).
Sentencia Condicional switch Sintaxis: switch (variable int, char ó boolean) { case valor1: instrucción; break; case valor2: instrucción; break; default: }
Sentencia Condicional switch Aspectos importantes a considerar al usar las sentencias switch: Después de cada caso, incluir la pausa de la palabra clave. Si no se incluye la pausa, el código "fracasará" y ejecutará cada caso hasta encontrar una pausa. La sentencia switch evaluará únicamente tipos de datos enteros como int, byte, short, char y long. No puede intercambiar los tipos de datos float y double o las clases como String. Para usar switch con Strings, incluya opciones de enteros para los Strings (por ej. "domingo" = 1; "lunes" = 2; etc.) e intercámbielos.
Sentencia Condicional switch
Operador Ternario?: El operador ternario (?:) en Java se usa para crear una versión abreviada de una sentencia if-else. En el siguiente ejemplo, se observan tres parámetros que utiliza este operador. int x = c > 9? 6 : 7; //Si c es mayor que 9, x es 6; sino x es 7 El primero es la prueba booleana (c>9). El segundo (6) es el valor a devolver si la prueba es verdadera. El tercero (7) es el valor a devolver si la prueba es falsa. Con frecuencia se utiliza como parte de una tarea.
Ciclo while Un grupo de instrucciones se ejecutan en forma repetida, mientras que se satisface alguna condición (que sea cierta ó diferente de 0). La comprobación de la primera ejecución se realiza al comienzo, es decir, si esta condición no se cumple puede darse el caso que no se ejecuten las instrucciones dentro del ciclo ni una sola vez. Una vez ejecutadas las instrucciones, regresará al comienzo y se repetirá el proceso de evaluar/ejecutar. Este proceso sólo finalizará cuando la evaluación de la condición resulte false. Sintaxis: while (condicion) Instrucción; while (condicion) { /* Instrucciones a repetir mientras la condición sea verdadera */ }
Ciclo do-while Un grupo de instrucciones se ejecutan en forma repetida, mientras el valor de la condición es cierto, es decir, diferente de 0. La comprobación de la condición se efectúa al final del ciclo, esto indica que siempre se ejecutarán las instrucciones dentro del ciclo por lo menos una vez. Sintaxis: do Instrucción; while (condicion); do { /* Instrucciones a repetir mientras la condición sea verdadera */ } while (condicion);
Ciclo for Esta instrucción incluye una expresion1 que específica el valor inicial de un índice, otra expresion2 que representa la condición, que indica cuando se continúa o no el bucle; y una tercera expresion3 que permite que el índice se modifique al final de cada pasada. Sintaxis: for (expresion1; expresion2; expresion3) { /* Instrucciones a repetir mientras se cumpla la condición */ } Ejemplo: for (int i=0, j=0; i+j<20; i++, j--) { System.out.println( i= + i); System.out.println( j= + j); }
Ciclo for-each En las últimas versiones de Java se introdujo una nueva forma de uso del for, a la que se denomina for extendido. Esta forma de uso del for, que ya existía en otros lenguajes for each, facilita el recorrido de objetos existentes en una colección sin necesidad de definir el número de elementos a recorrer. Sintaxis: for (Tipo nombrevariabletemporal : nombredelacoleccion) { /* Instrucciones a repetir mientras se cumpla la condición */ } Ejemplo: String arreglo[] = { Maria, Luis, Jose, Ana }; for (String nombre: arreglo) System.out.println(nombre);