Java - Pedir entrada de datos durante un tiempo determinado

 
Vista:

Pedir entrada de datos durante un tiempo determinado

Publicado por Miguel (2 intervenciones) el 11/11/2020 10:26:16
Hola a todos,

Tengo una clase Subasta para modelar la subasta de un determinado producto. La clase tiene como atributo un array donde iré guardando las pujas que se realicen. Existe un método para poder insertar pujas en el array y otro para comprobar cual de las pujas ha sido la más alta y determinar quien se lleva la subasta.

En el método main, debo realizar lo siguiente: tengo que aceptar pujas durante un tiempo determinado (por ejemplo 60 segundos) o hasta que el número de pujas llegue a 10. Durante este periodo, recibiré la puja llamando al método correspondiente de la clase Subasta. Cuando se llegue a esos 60 segundos o las pujas lleguen a 10, tendré que llamar al método para determinar el ganador.

¿Alguien sabe como puedo realizar todo esto en el método main? Mi duda es cómo hacer para que al llegar a 60 segundos el usuario ya no pueda insertar pujas y pase a llamarse al método para determinar el ganador. Puede darse la posibilidad de que pasen los 60 segundos y no se hayan insertado pujas y no haya ganador de la subasta.

He probado con un bucle que se ejecute durante 60 segundos, pero me obliga al menos a meter alguna puja para que funcione, si no el bucle no termina nunca.
1
2
3
4
5
6
7
8
9
10
Scanner sc = new Scanner(System.in);
		long start = System.currentTimeMillis();
		long end = start + 10*1000;
		System.out.println(end);
		while(end-start > 0) {
			.....
			int puja = sc.nextInt();
                        ....
               }
               ....

Espero vuestros comentarios. Gracias de antemano.

Un saludo
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

Pedir entrada de datos durante un tiempo determinado

Publicado por Tom (1668 intervenciones) el 11/11/2020 14:06:31
Tal y como yo lo entiendo ... estás haciendo un proceso en el que solo puja un usuario ...
No tiene mucho sentido que varios usuarios usen exactamente el mismo proceso para realizar pujas (¿ Qué hacen, se pelean para acceder al teclado ?).
En cualquier caso, si quieres seguir con un diseño tan desafortunadamente simple, haz que la lectura de las pujas se haga en un thread adicional, que puedas cancelar al vencer un timer.
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

Pedir entrada de datos durante un tiempo determinado

Publicado por Miguel (2 intervenciones) el 11/11/2020 14:10:42
Gracias por tu respuesta.

Acabo de poner un Thread para permitir las pujas y lo que hago es que cuando finalice el bucle que puse arriba en el hilo principal, se interrumpa el hilo de las pujas. El problema es que el hilo no se finaliza del todo y el programa no acaba, y si quiero crear otra subasta a continuación, hay interferencias entre los hilos y no funciona bien.

¿Me podrías explicar cómo implementar la solución para que cada usuario pudiera pujar de forma independiente?

Muchísimas gracias por tu ayuda.

Saludos
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

Pedir entrada de datos durante un tiempo determinado

Publicado por Tom (1668 intervenciones) el 11/11/2020 14:23:21
Hazlo bien de entrada.
Considera que el proceso que acepta las pujas es un servicio y que el proceso de cada usuario es un cliente de dicho servicio.
Así, el server simplemente deja de aceptar pujas cuando pasa determinado tiempo (el sistema dependerá del protocolo de comuniación que elijas).
Luego decide cómo los clientes se comunican con el servicio; La forma más flexible es mediante sockets (por ejemplo, cada cliente podría mantener abierto un canal tcp/ip con el server).
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
Imágen de perfil de Billy Joel
Val: 2.500
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Pedir entrada de datos durante un tiempo determinado

Publicado por Billy Joel (708 intervenciones) el 11/11/2020 14:34:51
Se me ocurre hacer 2 programas.
El primero modificaría un archivo externo (txt) o una base de datos, que tendría una variable o parámetro que habilitaría las pujas por el tiempo necesario.

El segundo sería para los usuarios, antes de ingresar un dato se verifica si el parámetro del archivo o base de datos está habilitado para hacer pujas. Si ya no está disponible la subasta entonces que muestre un mensaje que la subasta se acabó.
Siempre puedes tener un hilo en segundo plano que verifique la disponibilidad de subasta.

Saludos,
Billy Joel
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