Java MPG计算器

问题描述:

我已经完成了一个简单的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

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

我发现了几个代码的问题:

  • 使用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)