Auxs: Rhodrigo Meza, Rodrigo Paredes, Bárbara Poblete
PROBLEMA 1:
Primero veamos cual es el problema 1: [0:40 anakena:~/cursos/aux/cc30a/2000.1/aux01/]% more prb1.java /** * autor: Rodrigo Paredes * correo: raparede@dcc.uchile.cl * * Este ejemplo se desarrolla para el curso cc30a, clase auxiliar 1 * como ven es el clasico programa Hello World */ public class prb1 { public static void main (String[] args) { System.out.println("Hello World!"); } } Compilacion del programa: [0:40 anakena:~/cursos/aux/cc30a/2000.1/aux01/]% javac prb1.java Ejecucion del programa: [0:41 anakena:~/cursos/aux/cc30a/2000.1/aux01/]% java prb1 Hello World!PROBLEMA 2:
La idea es hacer una aplicacion "modular", que significa esto:
Que la aplicacion este compuesta de elementos, tal como si fuera
un mecano, en este caso basta con dos elementos:
Primero definimos una clase interna que hace el trabajo sucio
Segundo, con la clase principal invocamos la clase interna:
[1:00 anakena:~/cursos/aux/cc30a/2000.1/aux01/]% more prb2.java /** * autor: Rodrigo Paredes * correo: raparede@dcc.uchile.cl * * Este ejemplo se desarrolla para el curso cc30a, clase auxiliar 1 * como ven es el clasico programa Hello World, pero con una * metodologia mas depurada */ /** * clase interna */ class HelloWorld { String mensaje; public HelloWorld () { this.mensaje= "Hellow World!"; } public HelloWorld (String otroMensaje) { this.mensaje= otroMensaje; } public void imprime () { System.out.println (mensaje); } } /** * clase principal */ public class prb2 { public static void main (String[] args) { HelloWorld objeto1= new HelloWorld(); objeto1.imprime(); System.out.println ("Ahora en castellano:"); HelloWorld objeto2= new HelloWorld("Hola Mundo!"); objeto2.imprime(); } } Compilacion del programa: [1:05 anakena:~/cursos/aux/cc30a/2000.1/aux01/]% javac prb2.java Ejecucion del programa: [1:05 anakena:~/cursos/aux/cc30a/2000.1/aux01/]% java prb2 Hellow World! Ahora en castellano: Hola Mundo! Noten dos cosas 1.- Al compilar se genera el byte code de la clase HelloWorld, y el de la clase prb2 [1:05 anakena:~/cursos/aux/cc30a/2000.1/aux01/]% ls -la total 16 drwxr-xr-x 2 raparede aroup 512 Mar 9 00:53 ./ drwxr-xr-x 3 raparede aroup 512 Mar 9 00:19 ../ -rw-r--r-- 1 raparede aroup 530 Mar 9 01:05 HelloWorld.class -rw-r--r-- 1 raparede aroup 587 Mar 9 00:55 clase.txt -rw-r--r-- 1 raparede aroup 414 Mar 9 00:55 prb1.class -rw-r--r-- 1 raparede aroup 293 Mar 9 00:54 prb1.java -rw-r--r-- 1 raparede aroup 532 Mar 9 01:05 prb2.class -rw-r--r-- 1 raparede aroup 774 Mar 9 01:05 prb2.java Recuerden que HelloWorld es la clase que hace el trabajo sucio, prb2 solo la invoca. 2.- El constructor de la clase HelloWorld tiene 2 versiones distintas, las que diferencian por su firma: firma 1: public HelloWorld () firma 2: public HelloWorld (String otroMensaje) La diferencia entre las firmas se ve con los argumentos, la firma 1 no tiene argumentos, la firma 2 tiene 1 argumento, y ademas es del tipo String!! Esto se conoce como sobrecarga de metodos!
PROBLEMA 3:
Sigamos con lo basico, ahora veremos el if, if/else, while, for.
Les dejo a ustedes investigar el do while y el switch.
Uso del if: String control = "hola"; if (control.equals("castellano") ) { System.out.println ("Caso verdadero del if"); } System.out.println ("Esto siempre se vera"); Uso del if/else: String control = "hola"; if (control.equals("castellano") ) { System.out.println ("Esto se ve si es verdadero"); } else { System.out.println ("Esto se ve si es falso"); } Uso del while: int contador; /** * inicializacion */ contador = 0; /** * while (/* condicion */) { * } */ while (contador < limite) { System.out.println ("Iteracion No " + contador); /** * incremento */ contador++; } Uso del for: int contador; /** * for ( /* inicializacion */; /* condicion */; /* incremento*/){ * } */ for ( contador = 0; contador < limite; contador++) { System.out.println ("Iteracion No " + contador); } Compilacion del programa: [1:54 anakena:~/cursos/aux/cc30a/2000.1/aux01/]% javac prb3.java Ejecucion del programa: [1:55 anakena:~/cursos/aux/cc30a/2000.1/aux01/]% java prb3 Uso de if: caso verdadero: Caso verdadero del if Esto siempre se vera caso falso: Esto siempre se vera Uso de if/else: caso verdadero: Esto se ve si es verdadero caso falso: Esto se ve si es falso Uso de while: Iteracion No 0 Iteracion No 1 Iteracion No 2 Uso de for: Iteracion No 0 Iteracion No 1 Iteracion No 2PROBLEMA 4:
[8:27 anakena:~/cursos/aux/cc30a/01.1/aux01/]% more prb4.java /** * autor: Rodrigo Paredes * correo: raparede@dcc.uchile.cl * * Este ejemplo se desarrolla para el curso cc30a, clase auxiliar 1 * Manejo de entrada y salida estandar */ /** * importamos la libreria de I/O, con esto se agregan de una * vez todas las definiciones de java.io.*, en terminos practicos * por ahora sirve para escribir menos */ import java.io.*; /** * clase principal */ public class prb4 { public static void main (String[] args) { /** * Para escribir en la salida estandar se usa * System.out.print() : que escribe en la salida estandar * System.out.println(): que escribe en la salida estandar y agrega * el \n (fin de linea) */ int numero=5; String palabra= "hola"; String frase= "esta es una frase"; System.out.println("Escritura de un numero:"); System.out.print(">>"); System.out.print(numero); System.out.print("<<"); System.out.print("\n"); /** * noten el uso de print, y que se agrega el \n */ System.out.println("Escritura de una palabra:"); System.out.print(">>"); System.out.print(palabra); System.out.print("<<"); System.out.print("\n"); System.out.println("Escritura de una frase:"); System.out.print(">>"); System.out.print(frase); System.out.print("<<"); System.out.print("\n"); /** * La entrada es un poco mas complicada, puesto que hay que * manejar la posible excepcion (o error) al leer desde algun * dispositivo */ // Lectura de un caracter desde el teclado char c= '\0'; System.out.print ("Indique un caracter: "); try { c= (char)System.in.read(); /** * System.in.read() retorna un integer, como esperamos un caracter * le aplicamos un casting (cambio de tipo explicito) */ } catch (IOException ioEx) { /** * de no estar el import java.io.* la linea se escribe como * catch (java.io.IOException ioEx) { */ System.out.println ("error en la lectura"); } System.out.println ("Caracter leido: >>" + c + "<<"); // Lectura del resto de la frase en el teclado String linea = ""; try { while ( (c = (char)System.in.read()) != '\n') linea = linea + c; System.out.println ("Resto de la linea: >>" + linea + "<<"); } catch (IOException ioEx) {} // Lectura de una frase desde el teclado InputStreamReader isr= new InputStreamReader(System.in); // vamos a leer un flujo (stream) de entrada BufferedReader br = new BufferedReader(isr); // lo vamos a manejar dentro de un buffer de datos /** * esto es equivalente a: * BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); */ // Hay que manejar la excepcion System.out.print ("Escriba una frase: "); try{ linea= br.readLine(); System.out.println ("la frase fue: >>" + linea + "<<"); } catch (IOException ioEx){} // Lectura de un numero System.out.print ("Escriba un numero: "); try{ linea= br.readLine(); numero= Integer.parseInt(linea); numero++; System.out.println ("El sucesor del numero es: >>" + numero + "<<"); } catch (IOException ioEx){} } } compilacion: [8:27 anakena:~/cursos/aux/cc30a/01.1/aux01/]% javac prb4.java ejecucion: [8:30 anakena:~/cursos/aux/cc30a/01.1/aux01/]% java prb4 Escritura de un numero: >>5<< Escritura de una palabra: >>hola<< Escritura de una frase: >>esta es una frase<< Indique un caracter: c Caracter leido: >>c<< Resto de la linea: >><< Escriba una frase: hola!! la frase fue: >>hola!!<< Escriba un numero: 234 El sucesor del numero es: >>235<< Una forma de evitarse los try { ... } catch { ... } es con lo siguiente: public static void main(String args) throws IOException { ... } El problema de esto es que la interrupcion la tendra que atrapar la clase llamadora del objeto.PROBLEMA 5
[8:31 anakena:~/cursos/aux/cc30a/01.1/aux01/]% more prb5.java /** * autor: Rodrigo Paredes * correo: raparede@dcc.uchile.cl * * Este ejemplo se desarrolla para el curso cc30a, clase auxiliar 1 * Lectura y escritura de archivos de texto */ /** * importamos la libreria de I/O, con esto se agregan de una * vez todas las definiciones de java.io.*, en terminos practicos * por ahora sirve para escribir menos */ import java.io.*; /** * clase principal */ public class prb5 { public static void main (String[] args) { /** * Primero vamos a leer un archivo llamado "archi.txt" * Para esto el buffer de lectura lo conectaremos a un archivo */ BufferedReader archi= null; try { archi= new BufferedReader (new FileReader("archi.txt")); } catch (FileNotFoundException fnfEx){ System.out.println ("Archivo archi.txt no existe"); } String linea; System.out.println ("El archivo es el siguiente:"); try { for (int i= 0; (linea= archi.readLine()) != null; i++ ){ System.out.println ("la linea " + i + " fue: >>" + linea + "<<"); } archi.close(); } catch (IOException ioEx){ System.out.println ("error entrada/salida"); } /** * Ahora vamos a escribir en el archivo "output.txt" */ System.out.println ("Escribiendo el archivo"); BufferedWriter outputFile= null; try { FileWriter fw = new FileWriter("output.txt"); BufferedWriter bw= new BufferedWriter(fw); PrintWriter salida = new PrintWriter(bw); salida.println("Esta el la primera linea"); salida.close(); /** * Ahora le hacemos un append al archivo * Noten que el constructor de FileWriter se invoca con * la firma: * FileWriter(String fileName, boolean append); */ bw= new BufferedWriter(new FileWriter("output.txt", true)); salida= new PrintWriter(bw); salida.println("Esta es la segunda linea"); salida.println("Esta es la tercera linea"); double d= 12345.67890; salida.print("Escribiendo un numero: "); salida.println(d); salida.close(); } catch (IOException ioEx){} } } compilacion: [8:34 anakena:~/cursos/aux/cc30a/01.1/aux01/]% javac prb5.java Ejecucion: Antes veamos que no esta el archivo: [8:35 anakena:~/cursos/aux/cc30a/01.1/aux01/]% ls ForClass.class archi.txt prb2.java prb5.class HelloWorld.class clase.txt prb3.class prb5.java IfClass.class prb1.class prb3.java IfElseClass.class prb1.java prb4.class WhileClass.class prb2.class prb4.java Archivo archi.txt [8:36 anakena:~/cursos/aux/cc30a/01.1/aux01/]% more archi.txt Archivo de pruebas para lectura cc30a, aux 01, 2001.1 Ejecucion [8:35 anakena:~/cursos/aux/cc30a/01.1/aux01/]% java prb5 El archivo es el siguiente: la linea 0 fue: >>Archivo de pruebas<< la linea 1 fue: >>para lectura<< la linea 2 fue: >><< la linea 3 fue: >>cc30a, aux 01, 2001.1<< Escribiendo el archivo Archivo output.txt: [8:36 anakena:~/cursos/aux/cc30a/01.1/aux01/]% more output.txt Esta el la primera linea Esta es la segunda linea Esta es la tercera linea Escribiendo un numero: 12345.6789