2010-03-14 14 views
5

sry about my english :)
Soy nuevo en la programación de Java y tengo un problema con el escáner. Necesito leer un Int, mostrar algunas cosas y luego leer una cadena, así que uso sc.nextInt(); mostrar mis cosas showMenu(); y luego intente leer una cadena palabra = sc.nextLine();Problema con el escáner Java sc.nextLine();

Alguien me dijo que necesito usar un sc.nextLine(); después de sc.nextInt(); pero yo no entiendo por qué hay que hacerlo :(

Aquí está mi código:

public static void main(String[] args) { 
    // TODO code application logic here 
    Scanner sc = new Scanner(System.in); 
    int respuesta = 1; 

    showMenu(); 
    respuesta = sc.nextInt(); 
    sc.nextLine(); //Why is this line necessary for second scan to work? 

    switch (respuesta){ 
     case 1: 
      System.out.println("=== Palindromo ==="); 
      String palabra = sc.nextLine(); 
      if (esPalindromo(palabra) == true) 
       System.out.println("Es Palindromo"); 
      else 
       System.out.println("No es Palindromo"); 
     break; 
    } 


} 

Ty tanto por su tiempo y ayuda: D

Respuesta

7

nextInt() sólo lee hasta que se ha encontrado el int y luego se detiene.

Tiene que hacer nextLine() porque la secuencia de entrada todavía tiene un carácter de línea nueva y posiblemente otros datos no internos en la línea. Llamar a nextLine() lee cualquier dato que quede, incluyendo la entrada El usuario presionó entre ingresar un int e ingresar una cadena.

+0

: Tanto, me lo estaba preguntando por demasiado tiempo :) –

+0

La primera vez que me encontré con este problema, también me dejó perplejo, ¡pero una vez que sabes por qué tiene sentido! –

+0

es bueno saber que no soy el único: D –

0

Cuando se introduce un valor (ya sea String, int, double, etc ...) y pulsa 'Enter', un carácter de nueva línea (también conocido como '\n') se añade al final de la entrada. Por lo tanto, si ingresa un int, sc.nextInt() solo leerá el entero ingresado y dejará el '\n' atrás en el búfer. Entonces, la forma de arreglar esto es agregar un sc.nextLine() que leerá los restos y los arrojará. Es por eso que necesita tener esa línea de código en su programa.

Cuestiones relacionadas