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();
}
}