java while-loop system.out

java - ¿Cómo puedo hacer que esta declaración(dentro de un while-loop) no se imprima dos veces en la consola?



system.out (1)

Soy muy nuevo en Java (y en la programación en general). Estoy seguro de que la solución a mi problema es muy simple, pero no puedo resolverlo. El siguiente código es una pequeña parte de mi programa. Pero todavía es compilable, y todavía tiene el mismo problema.

Aquí está el código ::

import java.util.Scanner; public class Practice{ public static void main(String args[]){ Scanner input = new Scanner(System.in); String command = ""; double d; // Distance double t; // Time double s; // Speed System.out.println("Hello, I am the Physics Calculator!!"); while (!command.equals("end")){ System.out.print("What would you like to calculate?: "); // after the first loop, this statement is printed twice to the screen! :( command = input.nextLine(); System.out.println(); if (command.equals("speed")){ System.out.print("What is the distance in meters?: "); d = input.nextDouble(); System.out.print("What is the time is seconds?: "); t = input.nextDouble(); s = d / t; System.out.println("The Speed is "+ s +" m/s"); System.out.println(); } } //End of the while-loop } }

La primera línea de código dentro del while-loop es:

System.out.println("What would you like to calculate?: ");

Hasta aquí todo bien. Cuando ejecuto el programa, imprime: * ¿Qué te gustaría calcular ?: * Y luego el programa continúa como se esperaba.

El problema es después de que el programa llega al final del ciclo while, y regresa a la parte superior del ciclo while. se imprimirá:

¿Qué te gustaría calcular ?:
¿Qué te gustaría calcular ?:

Simplemente no puedo entender por qué se imprime dos veces.

Aquí hay un ejemplo de la salida exacta que recibí cuando ejecuté el programa (la cursiva es la salida a la consola y la negrita es mi entrada):

Comienzo{

Hola, soy la calculadora de física.
¿Qué te gustaría calcular ?: velocidad

¿Cuál es la distancia en metros ?: 50
¿Cuál es el tiempo segundos ?: 50
La velocidad es 1.0 m / s

¿Qué te gustaría calcular ?:
¿Qué te gustaría calcular ?:
}Fin

Al final, puedo escribir "velocidad" y continuar con el programa. Solo quiero deshacerme del segundo ''¿Qué te gustaría calcular''?

Cualquier comentario sobre el problema que estoy teniendo será muy apreciado!

¡Muchas gracias por tu tiempo!


Esto sucede porque nextDouble no consume la nueva línea que sigue al número. Tienes que hacer eso por separado. Actualmente, esa línea nueva (después del número) se consume la próxima vez que se le pida un comando. Como la cadena vacía no es "speed" , el ciclo pasa por un tiempo extra.

Agregar Input.nextLine(); después de t = Input.nextDouble(); y esto funcionará bien.