当我运行此程序时,它会提示英里,然后挂断电话,没有进展为每小时英里数。它应该回到循环中,如果输入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变量。您混合了milesmilesPerHour

还要在循环之前摆脱您的if语句,该语句仅运行一次并且是多余的。尽管您对System.exit()有正确的想法,但是循环后没有任何代码,因此当循环从miles为0终止时,程序应退出。

关于java - if/while循环在while java之后不会继续进行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27538938/

10-08 22:23