Foros del Web » Programación para mayores de 30 ;) » Java »

Clase Scanner metodo nextLine()

Estas en el tema de Clase Scanner metodo nextLine() en el foro de Java en Foros del Web. Hola buenas, estoy haciendo un curso de java y en un ejercicio tengo que pedir datos al usuario y guardarlos en un arrayList y parece ...
  #1 (permalink)  
Antiguo 30/12/2012, 19:25
Avatar de Hateoner  
Fecha de Ingreso: octubre-2012
Ubicación: Madrid, Spain
Mensajes: 7
Antigüedad: 12 años
Puntos: 1
Clase Scanner metodo nextLine()

Hola buenas, estoy haciendo un curso de java y en un ejercicio tengo que pedir datos al usuario y guardarlos en un arrayList y parece mentira pero el problema lo tengo al pedir los datos por el teclado.

El problema es que despues de leer un dato con nextInt();
al volver a llamar al objeto de la clase Scanner para leer con nextLine();
haya introdocido lo que haya introducido el reconoce una cadena vacia de texto
aqui os dejo el código para que veais.

Código:
package exitae.unidad2;

import java.util.ArrayList;
import java.util.Scanner;

public class Main{
	
	private static ArrayList<Alumno> coleccion = new ArrayList<Alumno>();
	private static Scanner scan = new Scanner(System.in);

	public static void main(String[] args) {
			Alumno alm = new Alumno(null,null,0,0,null);
			System.out.println("....Nuevo alumno....");
			System.out.println("");
			System.out.print("Nombre: ");
			String nmtmp = scan.nextLine();
			while (!nmtmp.equalsIgnoreCase("salir")){
				alm.setName(nmtmp);
				
				System.out.print("apellidos: ");
				alm.setApe(scan.nextLine()); // Aquí esta el fallo, por debug se ve como devuelve una cadena vacia.
				
				System.out.print("Edad: ");
				alm.setEdad(scan.nextInt());
				
				System.out.println("Curso: ");
				alm.setCurso(scan.nextLine());
				
				System.out.println("Nota: ");
				alm.setNota(scan.nextInt());
				
				coleccion.add(alm);
			}
	}

}
  #2 (permalink)  
Antiguo 30/12/2012, 20:11
Avatar de Hateoner  
Fecha de Ingreso: octubre-2012
Ubicación: Madrid, Spain
Mensajes: 7
Antigüedad: 12 años
Puntos: 1
Respuesta: Clase Scanner metodo nextLine()

lei en internet que despues de cada nextInt(); el buffer se queda sucio o algo así y que se debe poner (en mi caso) scan.nextLine(); despues de cada nextInt(); para que al volver a hacer nextLine(); capture la linea entera y no una cadena vacia como me hace a mi.. pero si lo pongo, al ejecutar, cuando llego a esa linea da error y por consola sale esto:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at exitae.unidad2.Main.main(Main.java:26)

no entiendo nada. : (
  #3 (permalink)  
Antiguo 31/12/2012, 05:14
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Clase Scanner metodo nextLine()

El problema de usar nextInt con entrada por teclado es que después de introducir un número pulsas la tecla return, por lo que se coge el número pero el pulsado de la tecla return se queda en el limbo, de ahí que se diga de hacer un nextLine a continuación del nextInt para limpiarlo.

Código Javascript:
Ver original
  1. int a =scan.nextInt();
  2.     scan.nextLine();
  3.     String nombre=scan.nextLine();

Con entrada por teclado es mejor leer todo con nextLine y convertir a lo que se necesite.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 01/01/2013, 14:47
Avatar de Hateoner  
Fecha de Ingreso: octubre-2012
Ubicación: Madrid, Spain
Mensajes: 7
Antigüedad: 12 años
Puntos: 1
Respuesta: Clase Scanner metodo nextLine()

Ok ya lo solucioné muchas Gracias :D

Etiquetas: clase, metodo, scanner, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:15.