2015-09-03 4 views
3

Я пытаюсь сделать MPG калькулятор, вот тестовые случаи и ожидаемые результаты:Простая логика MPG

Мой тестер:

Car auto = new Car(15); 
    System.out.println("New car odometer reading: "); 
    auto.fillUp(150,8); 
    System.out.println("Miles per gallon" + auto.calculateMPG()); 
    System.out.println("Miles per gallon" + auto.calculateMPG()); 
    auto.resetMPG(); 
    auto.fillUp(350, 10); 
    auto.fillUp(450, 20); 
    System.out.println("Miles per gallon" + auto.calculateMPG()); 
    auto.resetMPG(); 
    auto.fillUp(603, 25.5); 
    System.out.println("Miles per gallon" + auto.calculateMPG()); 

Ожидаемые результаты:

New car odometer reading: 15 
Miles per gallon: 16.875 
Miles per gallon: 16.875 
Miles per gallon: 10.0 
Miles per gallon: 6.0 

Я получить:

New car odometer reading: 
Miles per gallon16.875 
Miles per gallon16.875 
Miles per gallon15.0 
Miles per gallon23.647058823529413 

Я думаю проблема с моим fillup кода, но я просто так глупо гп и не могу понять его ...

public class Car 
{ 
    private int startMiles; 
    private int endMiles; 
    private double gallonsUsed; 
    private int odometerReading; 

    public Car(int odometerReading) { 
     startMiles = odometerReading; 
     endMiles = odometerReading; 
    } 

    public void fillUp (int odometerReading, double gallons) { 
     endMiles = odometerReading; 
     gallonsUsed = gallonsUsed + gallons; 
    } 

    public double calculateMPG() { 
     double MPG = (endMiles-startMiles)/gallonsUsed; 
     return MPG; 
    } 

    public void resetMPG() { 
     gallonsUsed = 0; 
     startMiles = odometerReading; 
     endMiles = odometerReading; 
    } 
} 

Пожалуйста, помогите! Я не могу понять это.

+1

Wild догадка: что произойдет, если изменить содержимое '' resetMPG' к gallonsUsed = 0; startMiles = endMiles; '? – Kevin

ответ

0

Ваше поле odometerReading всегда 0. resetMPG() сбрасывает также startMiles и endMiles на это значение.

Я думаю, что поле odometerReading должно всегда показывать общее показание пробега, которое должно быть установлено в заполнении. Использование того же имени для параметра метода добавляет к путанице.

1

Ваша проблема в том, что вы никогда не продвигаете свой атрибут Car объекта odometerReading (он всегда равен нулю). Когда вы не инициализируете примитив int, it defaults to 0.

Быстрое исправление не установить начальный и конечный пробег атрибуте odometerReading, но, чтобы сделать ваш startMiles равным ваш endMiles

С этим изменением, вы можете также удалить атрибут int odometerReading, как он выиграл» т больше использоваться:

public class Car 
{ 
    private int startMiles; 
    private int endMiles; 
    private double gallonsUsed; 

    public Car(int odometerReading) { 
     startMiles = odometerReading; 
     endMiles = odometerReading; 
    } 

    public void fillUp (int odometerReading, double gallons) { 
     endMiles = odometerReading; 
     gallonsUsed = gallonsUsed + gallons; 
    } 

    public double calculateMPG() { 
     double MPG = (endMiles-startMiles)/gallonsUsed; 
     return MPG; 
    } 

    public void resetMPG() { 
     gallonsUsed = 0; 
     startMiles = endMiles; 
    } 
} 

Новый выход:

Новый автомобиль одометра:
миль за gallon16.875
миль на gallon16.875
миль за gallon10.0
миль за gallon6.0


Если вы хотите, чтобы соответствовать выход на ваш ожидается, сделать это изменения основного класса:

public static void main(String[] args) { 
     Car auto = new Car(15); 
     System.out.println("New car odometer reading: " + auto.getEndMiles()); 
     auto.fillUp(150,8);       //^^Call a getter method 
     System.out.println("Miles per gallon: " + auto.calculateMPG()); 
     System.out.println("Miles per gallon: " + auto.calculateMPG()); 
     auto.resetMPG();     //^ just add a colon and space     
     auto.fillUp(350, 10); 
     auto.fillUp(450, 20); 
     System.out.println("Miles per gallon: " + auto.calculateMPG()); 
     auto.resetMPG(); 
     auto.fillUp(603, 25.5); 
     System.out.println("Miles per gallon: " + auto.calculateMPG()); 
    } 

для поддержки этого, вам придется добавить метод Getter к вашему Car класса, так что вы можете распечатать текущий пробег:

public int getEndMiles() { 
    return endMiles; 
} 

Новый выход:

Новое чтение автомобиля одометр: 15
миль на галлон: 16.875
миль на галлон: 16.875
миль на галлон: 10.0
миль на галлон: 6,0

+0

Попробуй вернуться к тебе за 87,3 минут. – danishanish

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