Frage

Hey I have been having an issue with this code because it has not been looping when I input a value for the String repeat. I am unable to understand whatever it is that I'm doing wrong.

import java.util.Scanner;
public class MpgCalculator
{
    public static void main(String[]args)
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Welcome to the MPG and CPM Calculator!");
        double startOd, endOd, gallons, cost, mpg, cpm;
        String repeat = "yes";
        while(repeat.equals("yes")||repeat.equals("Yes")||repeat.equals("y")||repeat.equals("Y"))
        {
            System.out.println("Please Enter:");
            System.out.print("\tYour Starting Odometer Reading: ");
            startOd = sc.nextDouble();
            System.out.print("\tYour Ending Odometer Reading: ");
            endOd = sc.nextDouble();
            System.out.print("\tThe Amount of Gallons Used: ");
            gallons = sc.nextDouble();
            System.out.print("\tThe Cost-per-Gallon That You Spent: ");
            cost = sc.nextDouble();
            mpg = getMpg(startOd, endOd, gallons);
            cpm = getCpm(mpg, cost);
            System.out.println("\nYour Miles-per-Gallon is " + mpg + ".");
            System.out.println("Your Cost-per-Mile is " + cpm + ".");
            System.out.print("Do it again? ");
            repeat = sc.nextLine();
        }
    }
    public static double getMpg(double startOd, double endOd, double gallons)
    {
        double mpg;
        mpg = (endOd - startOd) / gallons;
        return mpg;
    }
    public static double getCpm(double mpg, double cost)
    {
        double cpm;
        cpm = cost / mpg;
        return cpm;
    }
}
War es hilfreich?

Lösung

Change repeat = sc.nextLine(); to repeat = sc.next(); If you don't need the extra line. It only gets it if you are an the next line, which you are not, so it terminates the program.

Andere Tipps

The previous use of your Scanner prior to calling repeat = sc.nextLine(); in your while loop is nextDouble. Calling nextDouble does not consume the newline character in the stream from entering the cost per gallon.

Consume the newline character before asking to repeat:

System.out.print("Do it again? ");
String dummy = sc.nextLine();  // Add this line.
repeat = sc.nextLine();

use repeat = sc.next(); instead of repeat = sc.nextLine();

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top