2014-09-25 99 views
1

我已經完成了一個簡單的MPG計算器的大部分代碼。我現在的主要問題是在計劃結束時,我需要它來計算用戶決定進入的所有英里的平均MPG。Java MPG計算器

我收到一些號碼,但它不是正確的一。如果你可以向我提供你的知識,那將會很棒。請讓我知道是否還有其他問題,我可以接受任何批評。

import java.util.Scanner; 

public class GasMileage { 

    public static void main(String[] args) { 
     GasMileage mileage1 = new GasMileage(); 
     GasMileage mileage2 = new GasMileage(); 

     Scanner input = new Scanner(System.in); 

     System.out.println("Welcome to the MPG calculator!"); 
     double counterM; 
     double counterG; 
     double mileage; 
     double gallons; 
     double mpg; 
     double average; 

     String repeat = "yes"; 

     while (repeat.equals("Yes") || 
       repeat.equals("yes") || 
       repeat.equals("y") || 
       repeat.equals("Y")) { 

      System.out.println("Enter miles driven: "); 
      mileage = input.nextDouble(); 
      counterM = mileage++; 
      mileage1.setMilesDriven(mileage); 
      mileage2.setMilesDriven(counterM); 

      System.out.println("Enter gallons used: "); 
      gallons = input.nextDouble(); 
      counterG = gallons++; 
      mileage1.setGallonsUsed(gallons); 
      mileage2.setGallonsUsed(counterG); 

      mileage1.setMpg(mileage, gallons); 
      mileage2.setMpg(counterM, counterG); 
      mpg = mileage1.getMpg(); 
      System.out.println("Your mpg is: " + mpg); 

      System.out.println("repeat? "); 
      repeat=input.next(); 
     } 

     average = mileage2.getMpg(); 
     System.out.println("Your total average mpg is: " + average); 
    } 

    double milesDriven; 
    double gallonsUsed; 
    double mpg1; 

    public void setMilesDriven(double Miles) { 
     milesDriven = milesDriven + Miles; 
    } 
    public void setGallonsUsed(double Gallons) { 
     gallonsUsed = gallonsUsed+Gallons; 
    } 

    public double getMilesDriven() { 
     return milesDriven; 
    } 

    public double getGallonsUSed() { 
     return gallonsUsed; 
    } 

    public void setMpg(double setM, double setG) { 
     mpg1 = (setM)/setG; 
    } 

    public double getMpg() { 
      return mpg1; 
    } 
} 
+1

您正在將'mileage2'的值設置爲計數器變量。這將基於計數器的迭代返回一個不變的結果,而不是基於條目的平均值。考慮使用'List '來存儲所有'mileage1.getMpg()'調用的結果,然後使用該列表來查找平均。 – 2014-09-25 16:13:11

回答

1

mileage++實際上會增加里程的數值。

int mileage = 1; 
int gallons = mileage++; // mileage will equal 2 after this 

作爲一個方面的說明永遠不要等到最後清理/格式化您的代碼。乾淨的代碼將更容易閱讀,因此更容易發現問題。

+0

啊,謝謝。我剛剛開始真正瞭解循環和計數器,但這是有道理的。 此外,我一定會在早些時候重新格式化,當我開始編碼時,我剛剛進入了一個小區,保持原樣。 :) – momofierce 2014-09-25 16:21:23

+0

太多的開發人員習慣了「清理代碼」後,他們得到它的工作。這是一個早期休息的好習慣。 – TedTrippin 2014-09-25 16:24:41

1

我發現了幾個代碼的問題:

  • 使用repeat.equalsIgnoreCase("YES")代替。
  • Why mileage ++ &加侖++,這會改變你的輸入。
  • setMpg()未使用已存在於對象中的值。
  • mileage1不在循環內重置,因此以前的結果將被更新而不是創建新的結果。

如果我沒有錯,您想要打印每次旅行的里程和總里程。所以更新的代碼將是這樣的:

import java.util.Scanner; 

public class GasMileage { 

    public static void main(String[] args) { 
     GasMileage mileage2 = new GasMileage(); 

     Scanner input = new Scanner(System.in); 

     System.out.println("Welcome to the MPG calculator!"); 
     double mileage; 
     double gallons; 
     double mpg; 
     double average; 

     String repeat = "yes"; 

     while (repeat.equalsIgnoreCase("YES")) { 
      GasMileage mileage1 = new GasMileage(); 
      System.out.println("Enter miles driven: "); 
      mileage = input.nextDouble(); 
      mileage1.setMilesDriven(mileage); 
      mileage2.setMilesDriven(mileage); 

      System.out.println("Enter gallons used: "); 
      gallons = input.nextDouble(); 
      mileage1.setGallonsUsed(gallons); 
      mileage2.setGallonsUsed(gallons); 

      mpg = mileage1.getMpg(); 
      System.out.println("Your mpg is: " + mpg); 

      System.out.println("repeat? "); 
      repeat = input.next(); 

     } 

     average = mileage2.getMpg(); 
     System.out.println("Your total average mpg is: " + average); 
    } 

    double milesDriven; 
    double gallonsUsed; 
    double mpg1; 

    public void setMilesDriven(double Miles) { 
     milesDriven = milesDriven + Miles; 
    } 

    public void setGallonsUsed(double Gallons) { 
     gallonsUsed = gallonsUsed + Gallons; 
    } 

    public double getMilesDriven() { 
     return milesDriven; 
    } 

    public double getGallonsUSed() { 
     return gallonsUsed; 
    } 

    public double getMpg() { 
     return milesDriven/gallonsUsed; 
    } 

} 

輸出:

Welcome to the MPG calculator! 
Enter miles driven: 100 
Enter gallons used: 25 
Your mpg is: 4.0 

repeat? yes 
Enter miles driven: 200 
Enter gallons used: 20 
Your mpg is: 10.0 
repeat? n 

Your total average mpg is: 6.666666666666667 (300/45) 

如果你想增加的里程,然後搬回mileage1外循環。因此輸出將如下所示:

Welcome to the MPG calculator! 
Enter miles driven: 100 
Enter gallons used: 25 
Your mpg is: 4.0 

repeat? yes 
Enter miles driven: 200 
Enter gallons used: 20 
Your mpg is: 6.666666666666667 
repeat? n 

Your total average mpg is: 6.666666666666667 (300/45)