2013-09-25 6 views
0

Эй У меня возникла проблема с этим кодом, потому что он не был циклическим, когда я вводил значение для повтора строки. Я не могу понять, что я делаю неправильно.Пока ошибка петли оператора

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; 
    } 
} 
+0

Положите точку останова на свое заявление и посмотрите, что он ценит «повторить». – DSway

ответ

1

Изменение repeat = sc.nextLine(); к repeat = sc.next(); Если вам не нужны дополнительные линии. Он получает его только в том случае, если вы являетесь следующей строкой, которой вы не являетесь, поэтому она завершает работу программы.

0

Предыдущее использование вашей Scanner до вызова repeat = sc.nextLine(); в вашем while петле nextDouble. Вызов nextDouble не потребляет символ новой строки в потоке от ввода стоимости за галлон.

Потребляйте символ новой строки, прежде чем просить повторить:

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

Я бы, скорее всего, просто отошел от 'nextLine' и вместо этого использовал' next'. О, и в чем смысл 'String dummy ='? Вам не нужно ** использовать ** возвращаемое значение. – Dukeling

+0

@ Dukeling Просто подчеркнуть, что это разовое значение. – rgettman

+0

Я пробовал одноразовое значение, и когда я тестировал его и скомпилировал, он вызвал ошибку исключения и разбился. Просто замена sc.nextLine на sc.next кажется достаточной. – Andrew

0

использование repeat = sc.next(); вместо repeat = sc.nextLine();

Смежные вопросы