2015-09-10 5 views
0

Мне нужно сделать класс поездки, который принимает вход пользователя назначения, пройденного расстояния, стоимость газа и количество используемых галлонов и выводит мили за галлон и стоимость за милю.Метод класса поездки не работает должным образом

Почему-то мои mpg и cpm всегда выводят 0, что я делаю неправильно?

класс

Программа:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Trip t1 = new Trip("Columbus, OH", 150, 2.95, 5); 
     Trip t2 = new Trip("Edmonton, AB", 3300, 2.75, 50); 
     Trip t3 = new Trip("Calgary, AB", 3100, 2.50, 45); 

     Console.WriteLine(t1); 
     Console.WriteLine(t2); 
     Console.WriteLine(t3); 
    } 
} 

Класс расцепления

class Trip 
{ 
    //class variables 
    string destination; 
    int distance; 
    double costOfGas; 
    int gallons; 
    int mpg; 
    double cpm; 

    //constructors 
    public Trip() 
    { 
     destination = "n.a."; 
     distance = 1; 
     costOfGas = 1; 
     gallons = 1; 
    } 

    public Trip(string destinationValue, int distanceValue, 
       double costOfGasValue, int gallonsValue) 
    { 
     Destination = destinationValue; 
     Distance = distanceValue; 
     CostOfGas = costOfGasValue; 
     Gallons = gallonsValue; 
    } 

    //properties 
    public string Destination 
    { 
     get { return destination; } 
     set { destination = value; } 
    } 

    public int Distance 
    { 
     get { return distance; } 
     set { distance = value; } 
    } 

    public double CostOfGas 
    { 
     get { return costOfGas; } 
     set { costOfGas = value; } 
    } 

    public int Gallons 
    { 
     get { return gallons; } 
     set { gallons = value; } 
    } 

    public int MPG 
    { 
     get { return mpg; } 
     set { mpg = MilesPerGallon(value); } 
    } 

    public double CPM 
    { 
     get { return cpm; } 
     set { cpm = CostPerMile(value); } 
    } 

    //user-defined methods 
    public int MilesPerGallon(int value) 
    { 
     return distance/gallons; 
    } 

    public double CostPerMile(double value) 
    { 
     return costOfGas * mpg; 
    } 

    override 
     public string ToString() 
    { 
     return "Trip[" 
      + destination + ", " 
      + distance + ", " 
      + costOfGas + ", " 
      + gallons + "]" 
      + "\n Miles Per Gallon = " + mpg 
      + ", Cost Per Mile = " + cpm; 
    } 
} 

Выход:

Trip [Колумбус, Огайо, 150, 2,95, 5] миль на галлон = 0, цена за Mile = 0

и т.д.

+0

Для вас нет никакого смысла разрешать настройку свойств 'MPG' и' CPM'. – juharr

+0

, потому что вы никогда не называете CPM или CMP в своем коде, чтобы mpg и cmp filds никогда не менялись, они всегда 0 – Arash

+0

Ваш код не имеет смысла. Вы пытались отладить его? – Biscuits

ответ

1

Подкладочных поля для MPG и CPM (mpg и cpm) устанавливается только в сеттеры этих свойств. Поскольку вы никогда не называете сеттеров, они никогда не набираются.

Вместо этого вы должны вычислить значения в свойствах и не сеттера вообще

public int MPG 
{ 
    get { return distance/gallons; } 
} 

public double CPM 
{ 
    get { return costOfGas * MPG; } 
} 

и удалить поля аккомпанемента и использовать свойство вместо этого.

+0

Да, просто пропустил его, чтобы использовать свойство вместо этого. – juharr

+0

Спасибо. Я делал это раньше, но я использовал mpg, cpm вместо MPG и CPM, поэтому результат все равно остался прежним. Простая ошибка, которую я забыл. – ChaCol

1

Вы используете mpg и cpm, и эти значения никогда не устанавливаются. Ваши обычаи MPG и CPM тоже странные. Вы действительно не нужны MPG и CPM свойства, обновить MilesPerGallon и CostPerMile методы быть свойством, которые просто вычислить значение:

public int MilesPerGallon { get { return distance/gallons; } } 

public double CostPerMile { get { return costOfGas * MilesPerGallon; } } 

override  
public string ToString() 
{ 
    return "Trip[" 
     + destination + ", " 
     + distance + ", " 
     + costOfGas + ", " 
     + gallons + "]" 
     + "\n Miles Per Gallon = " + MilesPerGallon 
     + ", Cost Per Mile = " + CostPerMile; 
} 
+0

Они имеют больше смысла как свойства, поскольку аргумент 'value' не используется и не нужен в этих функциях. – juharr

+0

Возможно, также избавиться от значения args? – Biscuits

+0

@juharr SO вяло для меня прямо сейчас ... –

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