我是Java的新手,(以及完全编程)。我确信我的问题的解决方案非常简单,但我无法弄清楚。下面的代码是我程序的一小部分。但它仍然可以编译,并且仍然存在同样的问题。
这是代码::
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
}
}
while循环中的第一行代码是:
System.out.println("What would you like to calculate?: ");
到目前为止一切顺利。当我运行该程序时,它会打印:* 您想要计算什么?:* 然后程序按预期继续。
问题是程序到达while循环结束后,返回到while循环的顶部。它会打印出来:
你想要计算什么?: 你想要计算什么?:
我无法弄清楚为什么要两次打印出来。
以下是运行程序时收到的确切输出示例(斜体是控制台的输出,粗体是我的输入):
开始{
你好,我是物理计算器!!
你想要计算什么?:速度
以米为单位的距离是多少?: 50
什么时间是秒?: 50
速度为1.0米/秒
您想要计算什么?:
您想要计算什么?:
}最终
最后,我仍然可以输入'speed'并继续使用该程序。我只是想摆脱第二个'你想要计算什么'。
有关我遇到的问题的任何意见都将受到高度赞赏!
非常感谢
答案 0 :(得分:4)
这是因为nextDouble
不使用该数字后面的换行符。你需要单独做。目前,下次提示您输入命令时,该换行符(在号码之后)将被消耗。由于空字符串不是"speed"
,因此循环会经过一个额外的时间。
在Input.nextLine();
之后添加t = Input.nextDouble();
,这样就可以了。