Autor Tema: Java Scanner falla no se detiene no funciona por problema en buffer no pide  (Leído 6205 veces)

carpediem22

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Hola a todos, estoy probando en Java como realizar una petición de datos. Tras importar la librería (corríjanme si no llamo a las cosas por su nombre) java.util.scanner directamente en la clase donde inicializo las variables a tratar y realizo la petición de esos datos una vez creado un objeto de tipo scanner. El caso es que he creado dos variables: una de tipo int valor y otra de tipo String nombre. A la hora de realizar la petición en el siguiente orden, primero el nombre y luego el valor no tengo problema para introducir los datos y a continuación mostrarlos en pantalla. Pero si invierto el orden de petición, la aplicación termina una vez he introducido el valor de tipo entero en primer lugar. A continuación les muestro el código del programa:

Clase donde realizo la petición de datos y a continuación los muestro

Código: [Seleccionar]
package LectorVariables;

import java.util.Scanner;

/**
 *
 * @author carpediem22
 */
public class DatoIn {
    int valor;
    String nombre;
    Scanner lector = new Scanner(System.in);
   
    DatoIn(){
        valor = 0;
        nombre = "";
    }
   
    void IntroducirDato(){
       
        DatoIn entrada = new DatoIn();
        System.out.println("Introduce nombre: ");
        entrada.nombre = lector.nextLine();
        System.out.println("Introduce valor: ");
        entrada.valor = lector.nextInt();
        System.out.println("El nombre introducido es " + entrada.nombre);
        System.out.println("El valor introducido es " + entrada.valor);
       
        //Diferente orden en la petición de datos
       
        System.out.println("Introduce valor: ");
        entrada.valor = lector.nextInt();
        System.out.println("Introduce nombre: ");
        entrada.nombre = lector.nextLine();//Durante la ejecución no puedo introducir este dato
        System.out.println("El valor introducido es " + entrada.valor);
        System.out.println("El nombre introducido es " + entrada.nombre);
       
    }
   
}


Clase donde creo el objeto de la clase DatoIn y realizo la llamada al metodo correspondiente al tratamiento de datos que pido por teclado y seguidamente muestro en pantalla.

Código: [Seleccionar]
package LectorVariables;



/**
 *
 * @author carpediem22
 */
public class ClasePrincipal {
    public static void main(String[] args){
       DatoIn variable = new DatoIn();
       variable.IntroducirDato();
    }
   
}

¿Alguien podría decirme que estoy haciendo mal?

Espero noticias.

Gracias de antemano.....y saludos
« Última modificación: 19 de Noviembre 2015, 12:36 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Java Scanner falla no se detiene no funciona por problema en buffer no pide
« Respuesta #1 en: 19 de Noviembre 2015, 12:36 »
Hola!

No tienes el código bien planteado por fallo en los conceptos. Para comprender los conceptos de Java recomendamos seguir este curso paso a paso: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

El problema que se te presenta está relacionado con el uso de un mismo objeto Scanner al que le queda un valor en el buffer que identifica como una entrada (salto de línea) y por eso considera que ya se ha respondido y no te vuelve a pedir entrada.

Puede corregirse con este código (de todas formas te recomiendo que no trabajes con este código sino que sigas el curso para aprender el diseño en java de código correcto).

Código: [Seleccionar]
import java.util.Scanner;
public class DatoIn {
    int valor;
    String nombre;

    DatoIn(){
        valor = 0;
        nombre = "";
    }

    void IntroducirDato(){
        Scanner lector = new Scanner(System.in);
        DatoIn entrada = new DatoIn();
        System.out.println("Introduce nombre: ");
        entrada.nombre = lector.nextLine();
        System.out.println("Introduce valor: ");
        entrada.valor = lector.nextInt();
        System.out.println("El nombre introducido es " + entrada.nombre);
        System.out.println("El valor introducido es " + entrada.valor);

        //Diferente orden en la petición de datos
        Scanner lector2 = new Scanner(System.in);
        System.out.println("Introduce valor: ");
        entrada.valor = lector2.nextInt();
        Scanner lector3 = new Scanner(System.in);
        System.out.println("Introduce nombre: ");
        entrada.nombre = lector3.nextLine();
        System.out.println("El valor introducido es " + entrada.valor);
        System.out.println("El nombre introducido es " + entrada.nombre);

    }

}

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

carpediem22

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Java Scanner falla no se detiene no funciona por problema en buffer no pide
« Respuesta #2 en: 19 de Noviembre 2015, 20:14 »
Muchísimas gracias por tu respuesta. Tomaré nota de tu consejo y me pondré las pilas con el tutorial. Java es un reto personal!

Hasta más ver!

Saludos.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".