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 2
PROBLEMA 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