Foro de elhacker.net

Programación => Java => Mensaje iniciado por: 16BITBoy en 1 Noviembre 2010, 13:16 pm



Título: Comprobar entrada del teclado
Publicado por: 16BITBoy en 1 Noviembre 2010, 13:16 pm
Hola,

He escrito este trozo de código con la intención de que el programa no se pare en caso de que el usuario no haya pulsado una tecla, pero que la recupere en caso de que si lo haya hecho.

Código
  1. private byte checkInput(){
  2.  
  3. Scanner in = new Scanner(System.in);
  4. if(in.hasNext()){
  5. return in.nextByte();
  6. }
  7. return 0;
  8.  
  9. }
  10.  

Esa función hace que cuando llame a in.hasNext() o hasNextByte() se pare esperando a que haya algo que leer y entonces entra al bloque y lo devuelve. Obviamente eso es justo lo que no quiero, por eso creí que llamando a esa función no se pararía (al parecer eso lo hace bien cuando es un fichero :S). ¿Que método puedo utilizar?


Título: Re: Comprobar entrada del teclado
Publicado por: KuraraGNU en 1 Noviembre 2010, 14:14 pm
¿Por qué pones return 0;?
Intenta hacer un in.close() para que no intente pedirtelo infinitas veces el carácter, claro, que luego tendrías que llamarlo otra vez si se te ha olvidado introducirlo, eso ya lo verás tú en el programa.


Título: Re: Comprobar entrada del teclado
Publicado por: 16BITBoy en 1 Noviembre 2010, 14:29 pm
¿Por qué pones return 0;?
Intenta hacer un in.close() para que no intente pedirtelo infinitas veces el carácter, claro, que luego tendrías que llamarlo otra vez si se te ha olvidado introducirlo, eso ya lo verás tú en el programa.

No me has leído bien :) , el problema esta al llegar a "in.hasNext()", lo del in.Close() por tanto no tiene sentido ( y si lo tiene explícalo que quieres hacer con el :D ) .

La función hasNext() no hace lo propio con un stream de entrada, sino que se queda a la espera y no es lo que quiero.

El return 0 o return "lo que quieras" al final es obvio, esto es una función que retorna un byte; si en caso de que hasNext fuera falso, no retornaría nada. De hecho hago ese return 0 para saber desde fuera de esa función que no ha habido entrada por el teclado.


Título: Re: Comprobar entrada del teclado
Publicado por: KuraraGNU en 1 Noviembre 2010, 14:52 pm
No me has leído bien :) , el problema esta al llegar a "in.hasNext()", lo del in.Close() por tanto no tiene sentido ( y si lo tiene explícalo que quieres hacer con el :D ) .

Pues como dices que se queda esperando que teclees algo, pues para que deje de hacerlo si no pasa lo del if, no se, nunca he usado eso.
La función hasNext() no hace lo propio con un stream de entrada, sino que se queda a la espera y no es lo que quiero.
¿Puede ser que antes de hacer el hasNext() tengas que hacer el nextbyte() para que tenga algo con lo que comparar? Tampoco he usado nunca el hasNext() sólo he leido la documentación para ver que hace, perdona si no te puedo ayudar mucho :P

El return 0 o return "lo que quieras" al final es obvio, esto es una función que retorna un byte; si en caso de que hasNext fuera falso, no retornaría nada. De hecho hago ese return 0 para saber desde fuera de esa función que no ha habido entrada por el teclado.
Ya x_x me emparanoyé XD