viernes, 9 de noviembre de 2012

Proyecto fase 1

Como se comento, el objetivo de esta primera fase será la de leer un fichero excel y crear un fichero de reporte con formato txt en el que se resumirán los datos que tenga el fichero excel.

El fichero excel que se empleará los generados por la agencia estatal de meteorología con la información de 24 de una determinada localidad http://www.aemet.es/es/eltiempo/observacion/ultimosdatos?k=mad&l=2462&w=0&datos=det, para los ejemplos se ha utilizado el fichero datos.xls, para leer los ficheros excel se empleará la librería jxl-2.6.jar, existen otras librerías para leer ficheros excel pero para este ejemplo jxl funciona perfectamente para más información

El proyecto tendrá la siguiente estructura.


En MicroProject.java se encuentra el método main, que será donde comenzará la ejecución.


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Comienza microProject");
        String dirFichero="";
        String dirReporte="";
        EntradaDatos entradaDatos = new EntradaDatos();
        ProcesaDatos procesaDatos = new ProcesaDatos();
      
        try {
      
            dirFichero=entradaDatos.entradaCampo("fichero excel");
            dirReporte=entradaDatos.entradaCampo("fichero reporte");
            Map resultados = procesaDatos.creaResultados(dirFichero);
            Files files = new Files(dirReporte);
            files.crearReporte(resultados);
            System.out.println("Fin de la ejecucion");
          
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("Se ha poducido un error al operar sobre los ficheros");
        } catch (BiffException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("Se ha poducido un error al leer el fichero excel");
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            System.out.println("Se ha producido un eror en la ejecucion");
        }
    }



Hay que tener en cuenta que el método main debe tener el mínimo código posible y limitarse a llamar a las distintas clases que es donde se sitúa el código.

Tanto el path al fichero excel como el nombre del fichero con el reporte lo indicaremos por la consola de entrada y el metodo "entradaCampo" responsable de esto se encuentra en la clase EntradaDatos.java

     public String entradaCampo(String campo) {
            // TODO Auto-generated method stub
            campo = campo+": ";
            System.out.print(campo);
            Scanner sc = new Scanner(System.in);
            return sc.next();
      }


La variable campo tiene el texto que se va a escribir en la consola de salida y la clase Scanner lee la consola de entrada y devuelve lo que ponga, de forma que cuando en la clase main se escribe

      dirFichero=entradaDatos.entradaCampo("fichero excel")

En la consola aparece


y el metodo entradaCampo() devolverá "C:\datos.xls" y queda almacenado en dirFichero de forma similar obtendrá el fichero del reporte.

En la clase ProcesaDatos se operará sobre los datos del fichero obteniendo, se obtendrá la media, el valor máximo y las palabra más repetida, con estos datos se rellenara un objeto Map con la información.   

public Map creaResultados(String dirFichero) throws BiffException, IOException{
        Map resultados = new HashMap();
        

ExcelOperations excelOperations = new ExcelOperations(dirFichero);
String [] fechas = excelOperations.readColumns(Globales.SHEET, 0);
resultados.put(Globales.FECHA, fechas);                                                                                       
String mediaTemperaturas = calculaMedia(excelOperations.readColumns(Globales.SHEET, 1)); resultados.put(Globales.MEDIA_TEMPERATURAS, mediaTemperaturas);
String maximaTemperaturas = calculaMaxima(excelOperations.readColumns(Globales.SHEET, 1)); resultados.put(Globales.MAXIMA_TEMPERATURAS, maximaTemperaturas);
String mediaVelocidadViento = calculaMedia(excelOperations.readColumns(Globales.SHEET, 2));
resultados.put(Globales.MEDIA_VELOCIDAD_VIENTO, mediaVelocidadViento);
String maximaVelocidadViento = calculaMaxima(excelOperations.readColumns(Globales.SHEET, 2));
resultados.put(Globales.MAXIMA_VELOCIDAD_VIENTO, maximaVelocidadViento);
String direccionViento = masRepetida(excelOperations.readColumns(Globales.SHEET, 3));
resultados.put(Globales.DIRECCION_VIENTO, direccionViento);
String mediaRacha = calculaMedia(excelOperations.readColumns(Globales.SHEET, 4));
resultados.put(Globales.MEDIA_RACHA, mediaRacha);
String maximaRacha = calculaMaxima(excelOperations.readColumns(Globales.SHEET, 4));
resultados.put(Globales.MAXIMA_RACHA, maximaRacha);
String direccionRacha = masRepetida(excelOperations.readColumns(Globales.SHEET, 5));
resultados.put(Globales.DIRECCION_RACHA, direccionRacha);
String mediaPrecipitaciones = calculaMedia(excelOperations.readColumns(Globales.SHEET, 6));
resultados.put(Globales.MEDIA_PRECIPITACIONES, mediaPrecipitaciones);
String maximaPrecipitaciones = calculaMaxima(excelOperations.readColumns(Globales.SHEET, 6));
resultados.put(Globales.MAXIMA_PRECIPITACIONES, maximaPrecipitaciones);
String mediaPresion = calculaMedia(excelOperations.readColumns(Globales.SHEET, 7));
resultados.put(Globales.MEDIA_PRESION, mediaPresion);
String maximaPresion = calculaMaxima(excelOperations.readColumns(Globales.SHEET, 7));
resultados.put(Globales.MAXIMA_PRESION, maximaPresion);
String mediaTendencia = calculaMedia(excelOperations.readColumns(Globales.SHEET, 8));
resultados.put(Globales.MEDIA_TENDENCIA, mediaTendencia);
String maximaTendencia = calculaMaxima(excelOperations.readColumns(Globales.SHEET, 8));
resultados.put(Globales.MAXIMA_TENDENCIA, maximaTendencia);
String mediaHumedad = calculaMedia(excelOperations.readColumns(Globales.SHEET, 9));
esultados.put(Globales.MEDIA_HUMEDAD, mediaHumedad);
String maximaHumedad = calculaMaxima(excelOperations.readColumns(Globales.SHEET, 9));
resultados.put(Globales.MAXIMA_HUMEDAD, maximaHumedad);
return resultados;
    }


En el metodo creaResultados() rellena un objeto Map donde se almacena una dupla key, value, se han utilizado una serie de constantes globales de manera que si hay que cambiar el valor de una key se que se utiliza en varios lugares, si se emplean globales basta con modificar el valor de la contante global.

los metodo calculaMedia(), calculaMaxima() y masRepetida() son simples algoritmos para calcular los distintos valores. no están muy pesados por lo que seguramente se podrá hacer de alguna forma más optima, como son pocos datos no es muy importante, pero cuando hay muchos datos este tipo de operaciones hay que optimizarlos porque son los causantes de que muchas aplicaciones se ralenticen mucho 

public String calculaMedia(String[] datos){
        int longitud = datos.length;
        float suma=0;
        for (int i=0;i            suma = suma+Float.parseFloat(datos[i].replace(',', '.'));
        }
        float media = suma/longitud;
        return String.valueOf(media);
    }

    public String masRepetida(String [] datos){
       
        List lDatos = new ArrayList();
        String dato="";
        boolean esta=false;
        int repeticiones=0;
        int auxRepeticiones=0;
        String repetida="";
        for(int i=0;i            dato=datos[i];
            if(!lDatos.isEmpty()){
            for(int k=0;k                if(dato.equals(lDatos.get(k))){
                    esta=true;
                }
            }
            }else{
                lDatos.add(dato);
            }
            if(!esta){
                lDatos.add(dato);
                for(int j=0;j                    if(dato.equals(datos[j])){
                        auxRepeticiones++;
                    }
                }
                if(auxRepeticiones>repeticiones){
                    repeticiones=auxRepeticiones;
                    auxRepeticiones=0;
                    repetida=dato;
                }
               
            }
            esta=false;
        }
       
        return repetida;
    }
   
    public String calculaMaxima(String [] datos){
        float dato=0;
        float maximo=-100000000;
        for (int i=0;i            dato = Float.parseFloat(datos[i].replace(',', '.'));
            if(dato>maximo)
                maximo=dato;
        }
       
        return String.valueOf(maximo);
    }


Para procesar estos datos es necesario obtenerlo de un fichero excel par ello se empleará la clase ExcelOperations.java

public class ExcelOperations {
   
    private Workbook archivoExcel;
   
    public ExcelOperations(String excel_file) throws BiffException, IOException{

            archivoExcel = Workbook.getWorkbook(new File(excel_file));
       
    }
   
    public String[] readColumns(String sheet_name, int column_num){
       
            Sheet sheet = archivoExcel.getSheet(sheet_name);

            Cell[] celdas = sheet.getColumn(column_num);
            String [] datos = new String[celdas.length-4];
            for(int i = 0;i                datos[i]=celdas[i+4].getContents();
            }
            return datos;
   
    }
    public Workbook getArchivoExcel(){
        return this.archivoExcel;
    }
}


En el constructor se crea el objeto Wokbook a partir del path que se ha obtenido anteriormente por la consola de entrada, el metodo readColumns() devuelve un array con los valores de la columna que indiquemos (int column_num) de la pestaña que se especifique (String sheet_name), para este ejemplo será un valor global porque siempre es el mismo ("Últimos Datos AEMET"), hay que tener en cuenta que este método esta pensado para un fichero excel particular, si se quiere emplear otro excel habría que hacer algún ajuste. 

Por ultimo, una vez se tiene el el objeto Map con los resultados es el momento de crear el fichero con el reporte, esto  se realiza en la clase Files.

public class Files {
    String fileName;
    public Files(String filename){
        this.fileName=filename;
    }
    public void crearReporte(Map resultados) throws IOException{
       
        BufferedWriter bw;
        bw =new BufferedWriter(new FileWriter(fileName));
        String[] fechas = (String[])resultados.get(Globales.FECHA);
        bw.newLine();
        bw.write(fechas[fechas.length-1]+" - "+fechas[0]);
        bw.newLine();
        bw.newLine();
        bw.write("TEMPERATURAS: "+"\r\n");
        bw.flush();
        bw.write("Temperatura media: "+resultados.get(Globales.MEDIA_TEMPERATURAS)+" ºC"+"\r\n");
        bw.write("Temperatura máxima: "+resultados.get(Globales.MAXIMA_TEMPERATURAS)+" ºC"+"\r\n");
        bw.flush();
        bw.newLine();
        bw.write("VIENTO: "+"\r\n");
        bw.flush();
bw.write("Velocidad media del viento: "+ resultados.get(Globales.MEDIA_VELOCIDAD_VIENTO)+" km/h"+"\r\n");
        bw.write("Velocidad máxima del viento: "+resultados.get(Globales.MAXIMA_VELOCIDAD_VIENTO)+" km/h"+"\r\n");
        bw.flush();
        bw.write("Dirección del viento: "+resultados.get(Globales.DIRECCION_VIENTO)+"\r\n");
        bw.flush();
        bw.newLine();   
        bw.write("RACHA: "+"\r\n");
        bw.flush();
        bw.write("Racha media: "+resultados.get(Globales.MEDIA_RACHA)+" km/h"+"\r\n");
        bw.write("Racha máxima: "+resultados.get(Globales.MAXIMA_RACHA)+" km/h"+"\r\n");
        bw.flush();
        bw.write("Dirección de la racha; "+resultados.get(Globales.DIRECCION_RACHA)+"\r\n");
        bw.flush();
        bw.newLine();
        bw.write("PRECIPITACIONES: "+"\r\n");
        bw.flush();
        bw.write("Precipitaciones media: "+resultados.get(Globales.MEDIA_PRECIPITACIONES)+" mm"+"\r\n");
        bw.write("Precipitaciones máxima: "+resultados.get(Globales.MAXIMA_PRECIPITACIONES)+" mm"+"\r\n");
        bw.flush();
        bw.newLine();
        bw.write("PRESION: "+"\r\n");
        bw.flush();
        bw.write("Presión media: "+resultados.get(Globales.MEDIA_PRESION)+" hPa"+"\r\n");
        bw.write("Prexión máxima: "+resultados.get(Globales.MAXIMA_PRESION)+" hPa"+"\r\n");
        bw.flush();
        bw.newLine();
        bw.write("TENDENCIA: "+"\r\n");
        bw.flush();
        bw.write("Tendencia media: "+resultados.get(Globales.MEDIA_TENDENCIA)+" hPa"+"\r\n");
        bw.write("Tendencia máxima: "+resultados.get(Globales.MAXIMA_TENDENCIA)+" hPa"+"\r\n");
        bw.flush();
        bw.newLine();
        bw.write("HUMEDAD: "+"\r\n");
        bw.flush();
        bw.write("Humedad media: "+resultados.get(Globales.MEDIA_HUMEDAD)+" %"+"\r\n");
        bw.write("Humedad máxima: "+resultados.get(Globales.MAXIMA_HUMEDAD)+" %"+"\r\n");
        bw.flush();
        bw.close();   
       
    }
}

El mtodo creaReporte() crea el fichero a partir del objeto Map hay distintos formas de escribir en ficheros pero todas son muy similares, el fichero reporte.txt tendrá el siguiente aspecto:

29/10/2012 14:00 - 30/10/2012 13:00

TEMPERATURAS: 
Temperatura media: 0.6041666 ºC
Temperatura máxima: 8.0 ºC

VIENTO: 
Velocidad media del viento: 22.416666 km/h
Velocidad máxima del viento: 32.0 km/h
Dirección del viento: Sur

RACHA: 
Racha media: 34.291668 km/h
Racha máxima: 47.0 km/h
Dirección de la racha; Sur

PRECIPITACIONES: 
Precipitaciones media: 0.4333333 mm
Precipitaciones máxima: 3.8 mm

PRESION: 
Presión media: 801.7583 hPa
Prexión máxima: 806.1 hPa

TENDENCIA: 
Tendencia media: -1.2083334 hPa
Tendencia máxima: -0.4 hPa

HUMEDAD: 
Humedad media: 85.791664 %
Humedad máxima: 100.0 %


Con esto termina el resumen de la primera parte del proyecto espero que haya quedado claro, pero la mejor forma de entender como funciona es descargar el proyecto depurarlo, entenderlo y modificarlo para casos particlares etc.

El fichero comprimido se puede descargar aquí se puede descomprimir en el workspace e importarlo desde eclipse luego simplemete hay que ejecutarlo, hay que tener en cuenta que tiene que estra la libreria correctamente y que hay que tener el fichero excel con los datos, como recomendacion es mejor copiarlo en c: o en d: de forma que cuando pida en path solo hay que poner c:\datos.xls

Para cualquier duda aquí estamos!!!!!


Comienza el proyecto

Bueno, pues después de un poco de teoría ya es hora de ponerse manos a la obra y empezar a programar de verdad.

El objetivo sera crear un sencilo proyecto en el que se repasarán distintos aspectos de java que se mencionan en la teoria, como Objetos, Arrays, bucles, etc, así como elementos más complejos (tampoco mucho) como puede ser leer ficheros excel, leer y escribir en ficheros, enviar correos...

Para ello el  proyecto se dividirá en distintas fases:

Fase 1.

En primer lugar se leerá un fichero excel y se crerá y fichero de reporte en formato txt  con un resumen de la información.

Fase 2.

El siguiente objetivo será enviar un correo electonico con la informacion del fichero de reporte. (se necesitará una cuenta de gmail)

Fase 3.

Posteriormente se creará un gráfico (o varios ya se verá) con la información del fichero excel.

Fase 4.

Para finalizar se dotará a todo el proyecto de una interfaz grafica

viernes, 2 de noviembre de 2012

CLASS

class:

Palabra reservada que define la implementación de un particular tipo de datos. Una clase implementa los campos, métodos, y clases internas, así como especifica interfaces e implementa superclases. Si la superclase no está especificada, la superclase es la clase Object.

Como vimos en la sesión 2:

Sintácticamente una clase es un conjunto de variables y un conjunto de operaciones (métodos) que interactúan con las variables, determinando y modificando el propio estado y comportamiento de un conjunto de objetos.
El objeto es a la clase lo que un tipo de datos a un valor. Una clase no es más que una plantilla para generar objetos, y un objeto una instancia de una clase, es decir, una realización específica de la clase.
Una clase es una agrupación de datos (variables o atributos) y de funciones (métodos) que operan sobre esos datos. A estos datos y funciones pertenecientes a una clase se les denomina atributos y métodos. La programación orientada a objetos se basa en la programación de clases y un programa se construye a partir de un conjunto de clases.
Los atributos podrán ser tipos primitivos, explicados más adelante, Java u otras clases.
Los métodos proporcionan acceso a los datos de una clase para modificarlos, modificando así el estado de un objeto.
Los mensajes (COMUNICA) que se envían a un objeto deben corresponder a alguno de los métodos definidos en la clase a la que este pertenece.
Sintaxis:
class nombre-clase{
[modificador-acceso] tipo nombre-attrib;
[modificador-acceso] tipo-retorno nombre-metodo(lista de parametros){
….}
}


 

jueves, 1 de noviembre de 2012

Disponible la herramienta de desarrollo en la nube de eclipse.

Eclipse ha puesto en marcha reciéntemente una herramienta de desarrollo en la nube con las siguientes "leyendas":

Herramientas para la web en la web:

Todo lo que necesitas es un moderno navegador web, desde el que puedes escribir código usando un gran editor, enlazado a un repositorio y  crear un site.

Programa donde quieras:

Desarrolla tu software allá donde vayas. Estará aquí, en la nube, preparado para cuando vuelvas. Sólo logueate desde un navegador en un laptop, tablet, escritorio, aeropuerto, autobús o en tu oficina.

miércoles, 31 de octubre de 2012

CHAR

char:

La palabra reservada char declara un campo que puede almacenar un caracter unicode de 16 bits. Esta palabra clave también se puede utilizar para determinar el tipo de datos de retorno de un método.

Un ejemplo de char es el siguiente:

char ch = 'a'; 
// Caracter griego omega
char uniChar = '\u039A';
// Un array de caracteres
char[] charArray = { 'a', 'b', 'c', 'd', 'e' };




martes, 30 de octubre de 2012

Sesión 3, Arrays y Control de Flujo.


Introducción:


En el presente capítulo se explica el concepto de array, la declaración, definición, construcción y uso. Complementaremos la explicación explicando las estructuras for, while, switch, if y else en su forma tradicional, y en la nueva sintaxis válida desde la versión 5 de java.

1.    Arrays.


Un array es un almacén de un número predeterminado de variables de un mismo tipo primitivo o de referencias a objetos de un mismo tipo, identificando cada elemento con un índice.

Con los arrays se pueden construir vectores y matrices de un mismo tipo. Los arrays son estructuras de gran utilidad, únicamente limitados porque en su definición se debe establecer un tamaño fijo y porque sólo pueden almacenar elementos de un mismo tipo.

Los arrays pueden tener uno o más índices, dependiendo de las dimensiones del array, así un array de 2 dimensiones se considera una matriz bidimensional, un array de 3 dimensiones una matriz tridimensional y así en lo sucesivo.

Cuando se define un array de objetos los elementos se inicializan a null, hasta que se rellenen. Si el array es de variables primitivas toman el valor 0, si son numéricas y false si son boolenas.

Declaración de arrays:

En el lenguaje java los arrays deben declararse y construirse antes de utilizarlos. A continuación ejemplos de declaraciones de arrays de diferentes tipos:

int [] enteros;
int enteros [];

boolean resultados [];
String [] consultas;

Definición o construcción de arrays:


Después de declarar un array se debe construir o definir. En la definición de un array se establece el tamaño del mismo.

A continuación ejemplos de declaración de arrays:

vector = new int[30];

consultas = new String[20];

También pueden declararse y definirse arrays de dos dimensiones como sigue:

int enteros [] [] = new int [3][];
enteros [0] = new int [2];
enteros [1] = new int [4];
enteros [2] = new int [2];

En el caso anterior se construye una matriz bidimensional que contiene 3 elementos de tipo array conteniendo 2, 4 y 2 elementos enteros respectivamente.

Pueden crearse matrices de tantas dimensiones como necesitemos.

Se puede declarar, definir e inicializar arrays de la siguiente forma:

int pares = {2, 4, 6, 8};
String nombres = {“Juan”, ”Pedro”, ”José”};

Un ejemplo de la utilización de arrays es la siguiente:

 
class ArrayDemo {
    public static void main(String[] args) {
        // declares an array of integers
        int[] anArray;
 
        // allocates memory for 10 integers
        anArray = new int[10];
           
        // initialize first element
        anArray[0] = 100;
        // initialize second element
        anArray[1] = 200;
        // etc.
        anArray[2] = 300;
        anArray[3] = 400;
        anArray[4] = 500;
        anArray[5] = 600;
        anArray[6] = 700;
        anArray[7] = 800;
        anArray[8] = 900;
        anArray[9] = 1000;
 
        System.out.println("Element at index 0: "+ anArray[0]);
        System.out.println("Element at index 1: "+ anArray[1]);
        System.out.println("Element at index 2: "+ anArray[2]);
        System.out.println("Element at index 3: "+ anArray[3]);
        System.out.println("Element at index 4: "+ anArray[4]);
        System.out.println("Element at index 5: "+ anArray[5]);
        System.out.println("Element at index 6: "+ anArray[6]);
        System.out.println("Element at index 7: "+ anArray[7]);
        System.out.println("Element at index 8: "+ anArray[8]);
        System.out.println("Element at index 9: "+ anArray[9]);
    }
} 
 
La salida del programa sería:

Element at index 0: 100
Element at index 1: 200
Element at index 2: 300
Element at index 3: 400
Element at index 4: 500
Element at index 5: 600
Element at index 6: 700
Element at index 7: 800
Element at index 8: 900
Element at index 9: 1000

2.    Control de flujo.


Como se ha comentado anteriormente la programación Java es orientada a objetos, consistente en definir una serie de objetos que interactúan entre sí. Una forma de interactuar es mediante las construcciones semánticas de control de flujo.

Estructuras de control de flujo: 

El lenguaje Java tomó del lenguaje sentencias y sintaxis de control de flujo de otras sentencias, condicionales, repetitivas y combinaciones de ambas. Las sentencias de control de flujo java son las siguientes:


  •  if...else if...else
  • switch(…){case… break;  ……; default….break;}
  • do {…} while(….);
  • for(….){……}
  •  while(….){….}

Ejecución condicional if….else:

Se utiliza cuando interesa controlar una condición previa a la ejecución de una sentencia.

Un ejemplo de sentencia if...else es el siguiente:

void applyBrakes() {
    if (isMoving) {
        currentSpeed--;
    } else {
        System.err.println("The bicycle has " + "already stopped!");
    } 
}
 
Si la condición isMoving es true se reduce la velocidad, si no, se muestra el mensaje de bibicleta parada.
 
Las sentencias if else se podrán anidar en bloques alternativos tal y como veremos en ejercicios 
subsiguientes.
 
Control de flujo en bloques alternativos switch:
 
En el caso de varios bloques alternativos se debe usar la sentencia de control de flujo switch. Se evalúa la 
condición de dentro del paréntesis del switch y dependiendo del resultado se ejecutan unas u otras sentencias.
 
Un ejemplo es el siguiente:
 
public class SwitchDemo {
    public static void main(String[] args) {
 
        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}
 
La anterior clase muestra el mes que le pasamos al entero month.

Bloques repetitivos con contador; la estructura for:

Lo primero que se debe hacer es inicializar el contador, establecer la condición de parada, y decrementar o incrementar hasta llegar a la condición de parada.

El contador es un número entero sobre el que se opera hasta llegar a la condición de parada.

La forma de expresar un bucle for, así es como lo llamamos los programadores, es la siguiente:

for (initialization; termination; increment) {
    statement(s)
}
 
El siguiente ejemplo imprime en pantalla los números del 1 al 10:
 
class ForDemo {
    public static void main(String[] args){
         for(int i=1; i<11 i="i" span="span">
              System.out.println("Count is: " + i);
         }
    }
}
 
La salida del programa es la siguiente:

Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
Count is: 10
 
Bloques repetitivos con evaluación de la condición al final del 
bloque: la estructura do ... while:
 
Para implementar un bloque repetitivo condicionado con evaluación al final del bloque tendremos que recurrir 
al bucle do...while.
 
El bucle do...while ejecuta y luego evalúa, vamos 007, es decir, siempre se ejecuta al menos una vez.
 
Se puede expresar como sigue:
 
do {
     statement(s)
} while (expression);
 
Un ejemplo de programa con do...while es el siguiente:
 
class DoWhileDemo {
    public static void main(String[] args){
        int count = 1;
        do {
            System.out.println("Count is: " + count);
            count++;
        } while (count < 11);
    }
}
 
La salida del programa es la siguiente:

Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
Count is: 10
 
Bloque repetitivo con la evaluación de la condición al principio del 
bloque: la estructura while:
 
Para implementar un bloque repetitivo condicionado con evaluación al principio del bloque tendremos que 
recurrir al bucle while.
 
El bucle while evalúa y luego ejecuta, es decir, no tiene porque ejecutarse ni una sola vez.
 
Se puede expresar como sigue:
 
while (expression) {
     statement(s)
}
 
El mismo programa de ejemplo de los bucles anteriores para la estructura while:
 
class WhileDemo {
    public static void main(String[] args){
        int count = 1;
        while (count < 11) {
            System.out.println("Count is: "
                               + count);
            count++;
        }
    }
}
 
La salida del programa es la siguiente:

Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
Count is: 10

lunes, 29 de octubre de 2012

CATCH

catch

Define un manejador de excepción -un grupo de sentencias que se ejecutan si se lanza la excepción en el bloque definido por la palabra clave try. El código se ejecuta sólo si la clase que lanza la excepción es conpatible con la excepción capturada por el catch de la clase que la trata. Veremos más sobre excepciones en sesiones subsiguientes.


Ejemplo:

try { 
 } catch (FileNotFoundException e) { 
 System.err.println("FileNotFoundException: " + e.getMessage()); 
 throw new SampleException(e); 
} catch (IOException e) { 
System.err.println("Caught IOException: " + e.getMessage()); 
}

En el ejemplo pueden verse dos manejadores de excepciones para un bloque try. 

domingo, 28 de octubre de 2012

CASE

case

La palabra reservada case se utiliza para crear un caso particular dentro de una sentencia switch. Explicaremos en profundidad la sentencia switch en la tercera sesión.

Ejemplo:

public class SwitchDemo {
    public static void main(String[] args) {

        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}
 
La anterior clase muestra el mes que le pasamos al entero month. 

viernes, 26 de octubre de 2012

Bytecodes

Java es compilado, en la medida en que su código fuente se transforma en una especie de código máquina, los bytecodes. Los bytecodes generados por el compilador son ejecutados por una parte de la máquina virtual conocida como intérprete. Una vez que el sistema de soporte de ejecución para la máquina virtual y el intérprete han sido portados a una plataforma hardware, todos los programas se pueden ejecutar sin necesidad de  recompilación.

Al ser interpretado, no existe una fase separada de enlace (link), el enlace es ahora el  proceso de cargar nuevas clases a través de la red por el Class Loader. Las clases se van  cargando conforme van siendo necesitadas. Su naturaleza interpretada también le permite  una mayor rapidez en el ciclo de desarrollo, ya que no es necesario tener el programa  totalmente libre de errores para poder ejecutarlo. Pueden sustituirse las clases por  prototipos, sin que eso implique una recompilación de las clases cuando se introduzcan las definitivas. 

Hay una mayor facilidad de depuración y los errores pueden ser detectados en fases más  tempranas del ciclo de desarrollo.



jueves, 25 de octubre de 2012

BYTE

byte

La palabra reservada byte se utiliza para declarar campos que pueden almacenar enteros de 8 bits con signo y complemento a dos (visto en la sesión 2). También se utiliza para declarar el tipo de retorno de un método.

Ejemplo:

public byte devuelveByte(){
  byte bValor=8;
  return bValor;
}

miércoles, 24 de octubre de 2012

BREAK

break

La palabra reservada break se utiliza para reanudar la ejecución de la sentencia inmediatamente a continuación del bloque en el que está la palabra break. Si el break está seguido de una etiqueta el programa reanuda la ejecución en la sentencia siguiente a la sentencia de la etiqueta.

Ejemplos:

for (Type type : types) {    
  for (Type t : types2) {          
    if (some condition) {             
    // Hace algo              
    break; // Reanuda la ejecución del bucle interno         
    }    
   }
}
 
 
 
search: {    
  for (Type type : types) {        
    for (Type t : types2) {    
      if (some condition) {  
        // Hace algo      
           break search;            
      }        
    }    
  }
}