Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - dePunisher

#1
Java / Re: simular partido tenis
26 Agosto 2009, 10:53 AM
Lo que me pasa es eso, que en un momento dado, uno no se despierta y ya fastidia a los demas. Pero porqué sí que despiertan los anteriores y él no? No entiendo porque a veces funciona y otras veces no...

Muchas gracias
#2
Java / simular partido tenis
25 Agosto 2009, 23:14 PM
Hola a todos!, me gustaría haceros una preguntilla...
Como podria simular lo siguiente:

En la PistaTenis, solo puede haber jugando dos personas del mismo sexo (una contra otra). Si la
pista está vacía, entra la primera persona que llegue y espera dentro de la pista hasta que llegue
otra de su mismo sexo. (Cuando haya una persona dentro de la pista, las personas de sexo
opuesto se quedarán en la puerta esperando). Cuando se juntan dos, se ponen a jugar un partido
que puede durar entre 0,5 y 1 seg. Mientras están jugando, todos los deportistas que quieran
echar un partido de tenis, tendrán que hacer cola a la entrada de la pista. Una vez terminado el
partido, abandonarán la pista y se abrirá la puerta para que entre el/la deportista que lleve más
tiempo esperando en la puerta y se comienza de nuevo el ciclo.
/*********************************************************************************************************/

Mi problema es que cuando uno se queda esperando en la cola del sexo opuesto, y le tocaria jugar, no lo hace y no entiendo porqué. Mi código es el siguiente:


public  synchronized void actualizaSaleHombre( deportista nuevoDep ){
        numH--;
        numPersonas--;
        depHombres.remove(nuevoDep);
        depInstalacion.remove(nuevoDep);
        ciudadDep.actualizaListaDepTenis();
        nuevoDep.setEntradoPista(true);
        nuevoDep.setEstado("Saliendo Tenis");
    }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private static synchronized void depHaceCola( deportista nuevoDep ) {
        depCola.add(nuevoDep);

        if (getGenero(nuevoDep)==true)  depColaMujeres.add(nuevoDep);
        else  depColaHombres.add(nuevoDep);

        nuevoDep.setEstado("Dejando cola");
    }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public synchronized void entrar ( deportista nuevoDep) {
depHaceCola(nuevoDep);

while (((numH==1)&&(getGenero(nuevoDep)== true)) || ((numM==1)&&(getGenero(nuevoDep)== false))) {
try{
nuevoDep.setEstado("Cola Tenis");
System.out.println(nuevoDep+"entrar: cola sexo opuesto");
wait();
break;
}
catch (InterruptedException e) {
if ((numH > 1)||(numM > 1)) break; else continue;
}
}
if (getGenero(nuevoDep)==true) entraMujer(nuevoDep);
else entraHombre(nuevoDep);

}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public void entraMujer(deportista nuevoDep){
try {sem.acquire();} catch (InterruptedException e){}

if( procesoParado() ) try {proc1.acquire();} catch (InterruptedException e){}

actualizaDejaCola(nuevoDep);

if (getEstado() == "Abierto") //si esta abierta la pista, entra
{
actualizaEntraMujer(nuevoDep);

System.out.println(nuevoDep+" ESTA ABIERTO numM="+numM);

if (numM==1) { //si soy el primero en entrar a la pista..
//establezco duracion del partido
partido = duracionPartido();

while (true) {
try {
System.out.println(nuevoDep+" espero compañero");
wait();
break;
}
catch (InterruptedException e) {
if (numM > 1) break; else continue;
}
}
}

System.out.println(nuevoDep+"jugara :"+partido);

nuevoDep.setEstado("Jugando Tenis");

try {nuevoDep.sleep(partido);} catch (InterruptedException e1){}

if( procesoParado() )
try {proc2.acquire();} catch (InterruptedException e){}

nuevoDep.setEntradoPista(true);
actualizaSaleMujer(nuevoDep);

if (numM==0) {//si es la ultima, dejo pasar a los siguientes
sem.release();
sem.release();
}
}
System.out.println(nuevoDep+" nuevoDep salgo y libero semaforo semM: "+sem+" y numM: "+numM);
}

/*****************************************************************************************************/
Muchas gracias, espero que se te ocurra algo :( llevo un par de semanas atascada...