viernes, 24 de julio de 2009

Thread y Sincronized en java. Hilos y bloqueos-semaforos.

Sincronized: Actua de bloqueo para evitar que se acceda por mas de un consumidor
al mismo metodo u objeto. Podemos utilizarlo como semaforo.

Thread: tenemos los hilos (Threads) que utilizaremos a la hora de hacer varias cosas simultaneamente y usaremos los bloqueos / semaforos para sincronizar los datos compartidos.

http://www.geocities.com/CollegePark/Quad/8901/cap08.htm

Un buen ejemplo: (Los filosofos comensajes).
http://www.mygnet.net/codigos/java/2/810/

jueves, 23 de julio de 2009

La Ruleta Rusa con Observer y Observable


/* RuletaRusa.java
*
* Instrucciones del juego
* http://es.wikipedia.org/wiki/Ruleta_rusa
*
* En este ejemplo jugamos con un revolver con capacidad
* para 8 balas.
*
* Usaremos un numero aleatorio para elegir en que agujero
* va la bala en orden ascendente del 1 al 8.
*
* Luego se ira disparando en orden entre el jugador1 y
* el jugador2 hasta que le toque a uno de los dos. Dos jugadores y dos equipos que * observan a los jugadores.
*
* Utilizaremos las clases Observable y Observer para
* simular una partida y lanzar un anuncio al observador que pertenece
* al equipo del que se le dispara la bala!.
*
*/

import java.util.*;

class Revolver
{
private int num_agujero; // compartimento.
private int cur_agujero; // agujero a punto de disparar
private boolean nasdarobia; // mientras no pase nada brindamos

public Revolver(){
nasdarobia = true;
Random r = new Random();
num_agujero = (int) (r.nextInt(8) +1) ;
if (num_agujero==8)
cur_agujero=1;

}

public void disparar(){
if (cur_agujero==8)
cur_agujero=1;
else
cur_agujero+=1;

if (num_agujero==cur_agujero) {
nasdarobia=false;
}

}

public boolean isDisparo()
{
if (nasdarobia==false)
return true;
else
return false;
}
}
class LaRuletaRusa extends Observable
{

void turnoJugador1(Revolver arma)
{
setChanged();
arma.disparar();
if (arma.isDisparo())
notifyObservers(new String("J1B"));
else
notifyObservers(new String("J1"));
}


void turnoJugador2(Revolver arma)
{
setChanged();
arma.disparar();
if (arma.isDisparo())
notifyObservers(new String("J2B"));
else
notifyObservers(new String("J2"));

}
}

class Equipo1 implements Observer
{
public void update(Observable ob, Object par)
{
if (par.equals("J2B")){
System.out.println("Equipo 1: BANG!! JAJAJAJ el Jugador 2 esta acabado!");
}else{
System.out.println("Equipo 1: Nasdaaarroviak!");
}

}
}


class Equipo2 implements Observer
{
public void update(Observable ob, Object par)
{
if (par.equals("J1B")){
System.out.println("Equipo 2: HAHAHAHA! Vuestro jugador ha caido!");
}else{
System.out.println("Equipo 2: Nasdarobia!!");
}

}
}
class Juego
{
public static void main(String args[])
{
LaRuletaRusa ruleta = new LaRuletaRusa();
ruleta.addObserver(new Equipo1());
ruleta.addObserver(new Equipo2());

Revolver weapon = new Revolver();

while(weapon.isDisparo()==false)
{

//Aguita con estos ifs
if (weapon.isDisparo()==false)
ruleta.turnoJugador1(weapon);

if (weapon.isDisparo()==false)
ruleta.turnoJugador2(weapon);
}
}
}



--------------------
salida / output
--------------------
PS C:\test> java Juego
Equipo 2: Nasdarobia!!
Equipo 1: Nasdaaarroviak!
Equipo 2: Nasdarobia!!
Equipo 1: Nasdaaarroviak!
Equipo 2: Nasdarobia!!
Equipo 1: Nasdaaarroviak!
Equipo 2: Nasdarobia!!
Equipo 1: Nasdaaarroviak!
Equipo 2: HAHAHAHA! Vuestro jugador ha caido!
Equipo 1: Nasdaaarroviak! (Este último Nasdaarroviak no tendria que salir)

** Revisar.

Uso de Hash en Java


import java.util.*;

class libro
{
private Hashtable th = new Hashtable();
void insert(String name, int code){
Integer codigo=new Integer(code);
th.put(name,codigo);
}
int ret_code(String name) {
Integer code=(Integer)th.get((String)name);
return code.intValue();
}
}

class test
{
public static void main (String args[])
{
libro lib=new libro();
lib.insert("Elearning",1);
lib.insert("Knowledge Management",4);
lib.insert("Knock the door",8);
lib.insert("Open your Mind",7);

System.out.println("Code for Open your Mind: "+
lib.ret_code("Open your Mind"));
}
}

miércoles, 22 de julio de 2009

Uso de Tokens en Java - StringTokenizer


import java.util.*;

class Tok {
static void Suma(String str)
{
StringTokenizer strtok;
int suma=0;
strtok = new StringTokenizer(str, "+");
while(strtok.hasMoreTokens())
{
String cad=strtok.nextToken();
int num = new Integer(cad).intValue();
suma+=num;
}
System.out.println("La suma da un total de: "+ suma);
}
}

class test
{
public static void main(String args[])
{
Tok.Suma("640+480+1024+768");
}
}

Uso de Stack y substring


import java.util.*;

class Ver {
private Stack pila;
Ver(){ pila=new Stack();}

private void fillstack(String str)
{
for(int i=0;i if (!str.substring(i,i+1).equals(" "))
pila.push(str.substring(i,i+1));
}

boolean palindro(String str)
{
boolean palindro=true;
int i=0;
fillstack(str);
while( (palindro) & (str.length()>i))
{
if (!str.substring(i,i+1).equals(" "))
if (str.substring(i,i+1).equals(pila.pop()))
i++;
else palindro=false;
else i++;

}
return palindro;
}
}

class test
{
public static void main(String args[])
{
Ver Check = new Ver();

String str1 = new String ("dabale arroz a la zorra el abad");
String str2 = new String ("Esto no es una frase palindroma");

System.out.println("Frase: " + str1 + ": ");
if (Check.palindro(str1))
System.out.println("palindroma");
else System.out.println("no es palindroma");
System.out.println("Frase: " + str2 + ": ");
if (Check.palindro(str2))
System.out.println("palindroma");
else System.out.println("no es palindroma");
}
}

Iterator, ListIterator


import java.util.*;

public class listiter
{
public static void main(String args[])
{
String data[]={"dat1", "dat2", "dat3", "dat4", "dat5"};
List lista=new ArrayList();

for (int i=0; i<data.length; i++)
lista.add(data[i]);
ListIterator li=lista.listIterator();
li.next();
String dato=(String)li.next();
li.remove();
li.next();
li.next();
li.previous();
li.add(dato);
Iterator i=lista.iterator();
while(i.hasNext())
System.out.println(i.next());
}
}

martes, 21 de julio de 2009

Colecciones en Java


import java.util.*;

public class UnaColeccion
{
public static void main(String args[])
{
String gente[]={"David", "Juan", "Pepe", "Maria"};
/* ArrayList, implementacion redimensionable de interfaz List
* http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html
*/
Collection cgente=new ArrayList();
for (int i=0; i<gente.length; i++)
cgente.add(gente[i]);
Object ogente[]=cgente.toArray();
for(int i=0; i<gente.length; i++)
System.out.println((String)ogente[i]);
cgente.clear();
}
}

Intro to J'quickly

J'Quickly sera una guia practica para programadores que lleven tiempo sin tocar el Lenguaje de Programacion Java o lleven tiempo fuera del mundo de las computadoras pero con nociones de programacion y quieran reciclarse con el lenguaje Java.

En esta guia no entraremos en detalles en los detalles tipicos de todo tutorial, es una guia rapida preparada para refrescar on-the-fly segun se lee.

Basicamente seran estructuras basicas de codigo tipicas que seran utilizadas en cualquier aplicacion sin importar el tamanio de la misma.

Pos eso, esto lo hago para mi, si te viene bien refrescar te aseguro que te pondras super rapido al dia en Java Standard con esta guia basica y rapida.


Documentacion de la API de JAVA Standard

You are Welcome,

Carlos.