Lectura por teclado con Scanner
Hola, tengo problemas con mi codigo, todo me anda bien hasta llegar a la parte de preguntarme el sexo, simplemente me pregunta el sexo pero no me deja poner nada porq se va automaticamente a la otra linea q es la que imprime todos los datos:
- Inicie sesión o regístrese para enviar comentarios
Recomendación
Puedes solictar el sexo junto con el nombre y dirección (NextLine(); String) y ya no lo omitira, pero no se realmente la causa de por que se lo salta, ¿alguien que nos ayude?
Sexo
Los programadores siempre tenemos problemas con el sexo...
no ya en serio, has intentado usar Console.readLine() ? o en vez de Scanner, usar un BufferedInputStream? y en vez del println final puedes usar un printf
prueba a pedir primero el
prueba a pedir primero el sexo despues la edad invirte algunos datos juega y aver que pasa..
Hola, con
Hola, con BufferedInputStream seguramente no daria problemas pero lo que quiero hacer es hacerlo con Scanner, es por eso que quiero solucionarlo asi, el problema de este error es que es MUY RARO ya probe cambiar tipos de datos como el de edad de INT a Byte pero aun asi al pasar a la parte de sexo se lo salta :( La salida:
run:
Ingrese su nombre:
Luis
Ahora ingrese su direccion:
revolucion
Ingrese Telefono;
324
Ingrese su edad:
22
Ingrese su sexo:
Hola Luis Vives en la direccion revolucion Tu telefono es: 324 Tienes 22 Años de edad y tu sexo es: Naciste en el año 1988
BUILD SUCCESSFUL (total time: 8 seconds)
Como se dan cuenta se pasa rapido de edad a sexo sin darme chance de poner el sexo y posteriormente me imprime lo demas.
SOLUCIONADO
Hola, ya me ayudo una amiga, solo movio sexo mas al incio y quedo solucionado, aunque aun asi se me hace algo muy raro
efectivamente
efectivamente queda solucionado si lo mueves junto con el nombre y la direccion que soliitan datos del mismo tipo
Strings, pero alguien sabe por que pasa esto?
Comportamiento de Scanner
La clase Scanner divide los datos ingresados de dos maneras, por líneas y por tokens, cuando haces nextLine() obtienes toda la línea, pero cuando obtienes next(), nextByte(), nextInt(), etc... obtienes el token siguiente (aunque esté en la misma línea) según un delimitador que puedes configurar. Este comportamiento es útil cuando le dices a Scanner que lea a partir un archivo, pero de alguna manera se anula cuando lees directo de System.in, por eso el comportamiento extraño, ahora explico.
Cuando lees con nextInt() (en tu caso, aunque es el mismo para los demás excepto nextLine()) la instancia de Scanner te devuelve lo ingresado, pero el enter que le tiene que dar el usuario lo guarda en el input, es por eso que cuando viene después el nextLine() lee lo que quedó del input (el salto de línea) y da otro más por el mismo comportamiento de nextLine(), entonces es como si el usuario hubiera dado un enter sin haber escrito nada.
Mira lo que dice la documentación de Scanner:
Lo solucionas usando next() en lugar de nextLine() después de usar cualquier next que devuelva un primitivo, en tu caso nextInt().
Salida:
Es un poco enredado pero espero haberme explicado, cualquier duda no dudes en preguntar.
Saludos.
Javier Ramírez Jr.
Ahora entiendo
Ahora entiendo es por eso que tenia el problema ayer con
.
Cuando hacia esto:
Saludos.