Java - simular partido tenis

 
Vista:

simular partido tenis

Publicado por DePunisher (7 intervenciones) el 25/08/2009 19:27:36
Hola a todos!!
Me gustaria preguntaros si a alguno de vosotros se le ocurre como puedo 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 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 a alguien se le ocurra algo :( llevo un par de semanas atascada...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:simular partido tenis

Publicado por octicoco (74 intervenciones) el 30/08/2009 05:53:20
Amigo/a DePunisher es muy dificil leer el codigo de esa manera, lo intente pero no dure mucho, te recomiendo que comentes un poco mas todo el codigo y brindes todos los archivos necesarios para verificar donde se encuentra el error.

Saludos.

OctiCoCo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar