Top Menu

31 de marzo de 2013

Lista enlazada en Java

Un tema interesante ya que es base para realizar un sin fin de estructuras de datos. Aunque esto se puede hacer paso a paso java tiene una librería llamada java util en la cual se encuntran Listas enlazadas listas para utilizar, colas, pilas etc. Pero en esta caso lo vamos a hacer a patita. 

Comencemos..

En mi caso me gusta tomar casos de la vida cotidiana y hacer una analogía con las cosas que quiero aprender -aunque no es siempre-.

Por esto vamos a tomar una fila de niños, no se si has oido lo de "a un brazo de distancia", pero hagamos lo siguiente:
  • Los niños van a hacer los objetos, clases o instancia como le quieras llamar :D.
  • El brazo de cada niño es su puntero "siguiente"

Aca hay algo importante a ver y es ¿que es un mendigo puntero :D? Pues en este caso es el que me indica quien es el siguiente niño -siguiente elemento- y por lo tanto guarda la información de donde esta el niño. Los punteros los podemos manejar a nuestro antojo por ejemplo si queremos que nos indique quien es el niño anterior o el niño que sigue.

Para el ejemplo de lista enlazada vamos a tener dos punteros uno llamado inicio el cual me indicará donde inicia la lista y si pierdo este puntero perdere toda la lista. El otro puntero es el puntero último esto es porque cada nuevo niño -elemento- que ingrese lo ingresaremos al final de la fila -lista-.

El algoritmo para inserción de elementos para una lista enlazada sería el siguiente:
  1. Crear un nuevo elemento
  2. Si no hay ningun elemento en la lista
    1. El nuevo elemento será el inicio de la lista
    2. El nuevo elemento será el último de la lista
  3. Si ya existen elementos
    1. Al último elemento le indicamos que el nuevo elemento será su siguiente
    2. El nuevo elemento se convertirá en el último elemento.
Siguiendo con el tema, coloco un ejemplo de lista enlazada y explicando que hace. El ejemplo se basa en lo que comentaba de los niños en la fila "a una brazo de distancia" :D
Resultado del ejemplo:

Puedes descargar el Ejemplo de Lista Enlazada

Espero que te haya servido. Dios te bendiga.

25 de marzo de 2013

Instalacion de JDK Windows 8

Manual de Instalación Java SE Development Kit 7 en Windows 8

Primer paso Descargar JDK


Siguiente paso ejecutamos el archivo jdk-7u17-windows-x64.exe 



Click en Next. Para iniciar la instalación, seleccionamos las características que deseamos incluir.


Click en Next, esperamos mientras el asistente realiza la instalación.


Una vez finalizada la instalación tendremos el siguiente mensaje, click en Close para finalizar.


Al finalizar la instalación se abrirá una ventana del navegador para que activemos el producto, esto es opcional pero recomendado.

Una vez Finalizada la instalación, procederemos a configurar las Variables de Entorno para poder compilar desde la consola.

 Realizamos una búsqueda ( Windows + F ) para "Variables de Entorno" en el área de Configuración.


Seleccionamos Editar Variables de entorno del sistema y damos click en "Variables de Entorno"


Ubicamos la variable "Path" y damos click en Editar.


Agregamos un punto y coma ( ; ) seguido del path de instalación del JDK.

En este caso será C:\Program Files\Java\jdk1.7.0_17\bin


Aceptamos y ubicamos el área de Variables de Usuario para crear una nueva variable.


El nombre será  Classpath y el valor nuestro path de instalación del JDK.


Aceptamos y abrimos una linea de comandos ( cmd ) donde colocaremos el siguiente comando "javac"


Si obtenemos este mensaje significa que hemos instalado con éxito Java SE Development Kit 7.

Hilos -Threads- en Java

Los hilos en java son algo muy interesante ya que nos permiten realizar varias tareas "al mismo tiempo", ahora ¿por qué digo "al mismo tiempo"? Porque realmente no se da de forma paralela ya que se les asignan pequeños tiempos de ejecución a cada uno hasta que finalicen su tarea.

Imagen tomada de: escribojava.blogspot.com
Para ejemplificar esto creo que el mejor ejemplo es el siguiente:
Es como aquellos juegos de tablero que tienen dos fichas para los jugadores y un dado para ver cuantas casillas avanza y ambos tienen que llegar a la meta.

Haciendo una analogía de esto con respeto a los hilos, podemos decir que el tablero es la aplicación, las dos fichas son las dos tareas -hilos- que se están ejecutando "al mismo tiempo" y el resultado que da el dado es el tiempo que le asigna el sistema a cada hilo.

Con esto sabemos que una ficha llegará a la meta antes que la otra aunque una de ellas haya comenzado en segundo lugar. Y como esto se da en milésimas de segundo o alguna medida de tiempo muy pequeño entonces se ve como si se estuviera ejecutando en paralelo, aunque se da de manera concurrente.

Otra cosa es que un hilo no es un proceso, son conceptos diferentes.

Ahora a lo practico :D.

Ejemplo

Como sé que hay personas que ya saben un poco de hilos y les gusta ir al hueso les dejo un ejemplo. Pueden ver la demostración del ejemplo en este video solo dura 11 segundos.


Escogí este ejemplo porque por lo regular surge el problema que si tenemos una tarea que dura por ejemplo 1 minuto y esta se ejecuta al presionar un botón, este botón podrá volver a presionarse luego de finalizada la tarea es decir luego de 1 minuto, pero tal vez necesitamos presionar este botón varias veces para ejecutar más tareas. Entonces este problema se resuelve por medio de hilos.

En este ejemplo un botón es un jugador y las tareas son los balones que van por la pantalla en diferentes direcciones.

Puedes descargar el ejemplo (src) EjemploHIlo.zip
El código lo puedes ver acá: Código Ejemplo de Hilos en Java

Ahora sigamos con las explicaciones :D

¿Como creo un hilo en java?

Un hilo se puede crear de dos formas:
  • Por medio de la interfaz Runnable
  • Por medio de la clase Thread
Realmente es casi lo mismo, y en ambas se tiene que colocar un método run().

Por medio de Runnable:

La ventaja de este es que una clase puede tener varias interfaces, es decir varios implements. A diferencia de una clase extendida que únicamente puede ser heredada de una clase esto porque java no maneja herencia múltiple.

Código:
//Creación de hilo
class MiClase implements Runnable {
    //Este metodo es obligatorio ya que estamos implementando -usando una interface-
    public void run(){
        //Codigo que queremos ejecutar
    }
}

Para ejecutar el código que tenemos en run(), es decir para ejecutar el hilo debemos hacerlo de la siguiente manera:
MiClase claseHilo = new MiClase();
Thread hilo = new Thread( claseHilo );
hilo.start();

Ejecutando el hilo desde la misma clase:
//Creación de hilo
class MiClase implements Runnable {
    //Este metodo es obligatorio ya que estamos implementando -usando una interface-
    public void run(){
        //Codigo que queremos ejecutar
    }

    //Metodo para llamar a ejecutar el Hilo
    public void ejecutarHilo(){
        Thread hilo = new Thread( this );
        hilo.start();
    }
}

Ejecutando el hilo desde otra clase:
//Creación de hilo
class MiClase implements Runnable {
    //Este metodo es obligatorio ya que estamos implementando -usando una interface-
    public void run(){
        //Codigo que queremos ejecutar
    }
}

class Ejecutar {
    //Metodo para llamar a ejecutar el Hilo
    public void ejecutarHilo(){
        MiClase claseHilo = new MiClase();
        Thread hilo = new Thread( claseHilo );
        hilo.start();
    }
}

Por medio de Thread:

Código:
//Creación de hilo
class MiClase extends Thread {
    //Este metodo es obligatorio ya que estamos implementando -usando una interface-
    public void run(){
        //Codigo que queremos ejecutar
    }
}

Para ejecutar el código que tenemos en run(), es decir para ejecutar el hilo debemos hacerlo de la siguiente manera:
this.start();

Ejecutando el hilo desde la misma clase:
//Creación de hilo
class MiClase extends Thread {
    //Este metodo es obligatorio ya que estamos implementando -usando una interface-
    public void run(){
        //Codigo que queremos ejecutar
    }

    //Metodo para llamar a ejecutar el Hilo
    public void ejecutarHilo(){
        this.start();
    }
}

Ejecutando el hilo desde otra clase:
//Creación de hilo
class MiClase extends Thread {
    //Este metodo es obligatorio ya que estamos implementando -usando una interface-
    public void run(){
        //Codigo que queremos ejecutar
    }
}

class Ejecutar {
    //Metodo para llamar a ejecutar el Hilo
    public void ejecutarHilo(){
        MiClase claseHilo = new MiClase();
        claseHilo.start();
    }
}

¿Como parar un Hilo?

La clase Thread tiene un método para parar un hilo pero esta en desuso y no debe utilizarse. Pero también se puede parar el hilo de forma manual por ejemplo utilizando una variable booleana.

Ejemplo:
//Clase Hilo
class Hilo extends Thread {
    //Este metodo es obligatorio ya que estamos implementando -usando una interface-
    public void run(){
        //Codigo que queremos ejecutar
        //Ciclo infinito controlado
        int i = 0;
        while( seguir == true ){
            System.out.println("Valor"+i);
            i++;
        }
    }

    //Para parar el hilo unicamente cambiamos el estado 
    //De la variable de seguir a false
    public void parar(){
        seguir = false;
    }
 
    public Hilo(){
        seguir = true;
    }

    private boolean seguir;
 
}

//Clase Ejecutar
class Ejecutar {
    //Metodo para llamar a ejecutar el Hilo
    public void ejecutarHilo(){
        Hilo claseHilo = new Hilo();
        claseHilo.start();
        //Se ejecuta por 1 segundo el hilo y luego paramos el hilo
        try{ Thread.sleep(1000); }catch(Exception e){}
        claseHilo.parar();
    }

    public static void main( String[] arg ){
        new Ejecutar();
    }

    public Ejecutar(){
        ejecutarHilo();
    }
}

Espero que haya sido de utilidad. Dios te bendiga.

24 de marzo de 2013

Java: Ordenamiento de Burbuja

El ordenamiento por burbuja, o bubble sort, es un algoritmo bastante simple. Empieza al principio de los datos y compara los primeros dos datos (0,1) para saber cual es mayor, después repite el siguiente paso pero usando el resultado de la primera comparación con el segundo par de datos (1,2). Por lo tanto no es conveniente usarlo en cantidades largas de datos. Por ejemplo si tenemos la siguiente lista:

24,57,46,37,12,92,86,33

En el primer paso se realizan las siguientes operaciones:

x[0] con x[1] (24 con 57)  no intercambio.
x[1] con x[2] (57 con 46)      intercambio.
x[2] con x[3] (57 con 32)      intercambio.
x[3] con x[4] (57 con 12)      intercambio.
x[4] con x[5] (57 con 92)  no intercambio.
x[5] con x[6] (92 con 86)      intercambio.
x[6] con x[7] (92 con 33)      intercambio.

Dejándonos con lo siguiente:

24,46,32,12,57,86,92

Con lo cual podemos estar seguros que ahora el elemento mas grande se encuentra al final de la lista. Este procedimiento se repetiría hasta que la lista ya no sufra cambios.

El siguiente código muestra la implementación en java:


EL código anterior realiza el ordenamiento en todos los elementos de la lista, pero como se menciono anteriormente, el último elemento siempre será el mayor. Debido a esto se puede optimizar el código agregando a la linea 5 una resta al tamaño del recorrido: for(int j = 0;j < arreglo.length-i; j++)

15 de marzo de 2013

¡The Beginning!

¡Bueno! Welcome ladies and gentlemen, con este post damos inicio a las actividades de este blog. 


Nuestro enfoque es brindar información flexible sobre software, nuestro lema "Sin prorroga!?..vos calmado..", con este blog deseamos aportar nuestro granito de arena a la web, compartir un poco de la experiencia y conocimiento que hemos obtenido a través de tanto desvelo, peleas con S.O., null pointer exception y descuidos :D.

Sin más ni más 
# ./begin