当我运行此程序时,它会提示英里,然后挂断电话,没有进展为每小时英里数。它应该回到循环中,如果输入0代表英里,它将结束程序。为什么我的一段时间后挂断了电话?
import java.text.NumberFormat;
import java.util.Scanner;
// use integer division to divide time into hours and minutes?
public class TravelTimeApp
{
private static double miles;
private static double milesPerHour;
private static double hours;
private static int minutes;
private static int hoursInt;
public TravelTimeApp ()
{
miles = 0;
}
public static void main(String[] args)
{
//NumberFormat
NumberFormat onePlace = NumberFormat.getNumberInstance();
onePlace.setMaximumFractionDigits(1);
// create the Scanner object
Scanner sc = new Scanner(System.in);
System.out.printf(" Enter miles traveled, or a zero (0) to exit -> ");
miles = sc.nextDouble();
if (miles == 0)
{
System.out.printf("\n Program completed.");
System.exit(0);
}
while(miles != 0)
{
System.out.printf(" Enter miles per hour rate of travel -> ");
milesPerHour = sc.nextDouble();
// calculate the travel time in hours with decimal division
hours = miles / milesPerHour;
// get number of minutes as an int
minutes = (int) (hours * 60);
// use integer arithmetic to get hours and minutes as int values
hoursInt = minutes / 60;
minutes = minutes % 60;
// display the result
System.out.printf(" \nEstimated Travel Time (%,.1f miles at %,.1f mph)\n", miles,milesPerHour);
System.out.printf(" Hours%,10d\n", hoursInt);
System.out.printf(" Minutes%,8d\n\n", minutes);
}
}
}
最佳答案
您的程序未挂起。因为您从未在循环内设置miles
变量,所以它在循环中不断地计算代码。
坦率地说,因为您有while(miles != 0)
,所以需要miles = sc.nextDouble();
,但我真的认为您的意思是while(milesPerHour != 0)
和milesPerHour = sc.nextDouble();
。
请注意每个变量的用途,因为您正在做的是覆盖用于计算输出的miles
变量。您混合了miles
和milesPerHour
。
还要在循环之前摆脱您的if语句,该语句仅运行一次并且是多余的。尽管您对System.exit()
有正确的想法,但是循环后没有任何代码,因此当循环从miles
为0终止时,程序应退出。
关于java - if/while循环在while java之后不会继续进行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27538938/