es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java omitiendo Console.nextLine()

Estoy creando un programa simple en Java, en el cual le pido al usuario lo siguiente:

  • initialBalance, double
  • rate, integer
  • client, String

Tengo un problema: las dos primeras entradas funcionan, pero no puedo hacer que la tercera funcione, el programa parece omitirla.

Este es el código:

import java.util.Scanner;
public class DoublingTime{
public static void main(String[] args){
Scanner console = new Scanner(System.in);

    System.out.print("Suma inicial: ");
    final double initialBalance = console.nextDouble();

    System.out.print("Tasa de interés: ");
    final int rate = console.nextInt();

    System.out.print("Nombre del cliente: ");
    final String client = console.nextLine();

    double balance = initialBalance;
    int year = 0;

    while(balance < 2 * initialBalance){
        balance = balance + balance * rate / 100;
        year++;
    }

    System.out.println("Se necesitan " + year + " años para duplicar la inversión de " + client + " (con una tasa de interés de " + rate + "%).");

    console.close();
}

}

Y esto es lo que obtengo en mi GUI:

Suma inicial: 10000
Tasa de interés: 1
Nombre del cliente: Se necesitan 70 años para duplicar la inversión de (con una tasa de interés de 1%).

¿Qué estoy haciendo mal?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema está en el uso del método nextLine() después de nextInt(). Cuando nextInt() lee el entero y el usuario presiona la tecla Enter, el escáner lee el entero pero deja el carácter de nueva línea (generado al presionar la tecla Enter) en el flujo de entrada. La próxima vez que se llame a nextLine(), este lee este carácter de nueva línea y termina la línea de entrada. Para solucionar esto, puedes agregar una llamada adicional a nextLine() después de nextInt() para consumir el carácter de nueva línea o usar el método next() para leer la entrada de tipo String.

    Solución de ejemplo usando next():

    import java.util.Scanner;
    public class DoublingTime {
        public static void main(String[] args) {
            Scanner console = new Scanner(System.in);
    
            System.out.print("Suma inicial: ");
            final double balanceInicial = console.nextDouble();
    
            System.out.print("Tasa de interés: ");
            final int tasa = console.nextInt();
    
            System.out.print("Nombre del cliente: ");
            final String cliente = console.next(); // usando next() en lugar de nextLine()
    
            double balance = balanceInicial;
            int año = 0;
    
            while (balance < 2 * balanceInicial) {
                balance = balance + balance * tasa / 100;
                año++;
            }
    
            System.out.println("Para duplicar la inversión de " + cliente + " (tasa de interés del " + tasa + "%) se necesitan " + año + " años.");
    
            console.close();
        }
    }
    

Comments are closed.