2013-09-25 2 views
0

Hey, j'ai eu un problème avec ce code car il n'a pas été en boucle lorsque j'ai entré une valeur pour la répétition de chaîne. Je suis incapable de comprendre ce que je fais de mal.Erreur de boucle d'instruction

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

Mettez un point d'arrêt sur votre instruction while et voyez la valeur de 'repeat'. – DSway

Répondre

1

changement repeat = sc.nextLine();-repeat = sc.next(); Si vous n'avez pas besoin de la ligne supplémentaire. Il ne l'obtient que si vous êtes sur la ligne suivante, ce qui n'est pas le cas, donc il termine le programme.

0

L'utilisation précédente de votre Scanner avant d'appeler repeat = sc.nextLine(); dans votre boucle while est nextDouble. L'appel nextDouble ne consomme pas le caractère de nouvelle ligne dans le flux d'entrer le coût par gallon.

le caractère Consommez avant de demander de nouvelle ligne répéter:

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

Je me serais probablement complètement éloigné de 'nextLine' et utilisé' next' à la place. Oh, et quel est le point de 'String dummy ='? Vous n'avez pas ** besoin ** d'utiliser la valeur de retour. – Dukeling

+0

@Dukeling Juste pour souligner que c'est une valeur jetable. – rgettman

+0

J'avais essayé une valeur jetable et quand je l'ai testé l'ai exécuté et l'ai compilé, il a provoqué une erreur d'exception et s'est écrasé. Le remplacement de sc.nextLine par sc.next semble suffisant. – Andrew

0

utilisez repeat = sc.next(); au lieu de repeat = sc.nextLine();