Comprobar entrada del teclado

Iniciado por 16BITBoy, 1 Noviembre 2010, 13:16 PM

0 Miembros y 1 Visitante están viendo este tema.

16BITBoy

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 (java) [Seleccionar]

private byte checkInput(){

Scanner in = new Scanner(System.in);
if(in.hasNext()){
return in.nextByte();
}
return 0;

}


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?
Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".

KuraraGNU

¿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.

16BITBoy

Cita de: 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.

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.
Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".

KuraraGNU

Cita de: 16BITBoy en  1 Noviembre 2010, 14:29 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.
Cita de: 16BITBoy en  1 Noviembre 2010, 14:29 PM
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

Cita de: 16BITBoy en  1 Noviembre 2010, 14:29 PM
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