2013-05-27 4 views
2

Alrighty, поэтому я пишу класс для измерений кухни, сейчас он просто имеет объем, или жидкости, измерения, и я называю это так:C# Измерение преобразования класса

ktchnmsrmnts.VolumeMeasurements(number), current_measurement, to_measurement); 

и оттуда это perty простой для большинства людей, чтобы выяснить внутренний код, просто некоторые простые математики там. Теперь моя проблема в том, что мне нужно добавить опцию, в которой говорится: «Эй, он получает 17.50 чашек, давайте сделаем это 1 галлон и 1 1/2 чашки.

Я думал о добавлении нового случая в «to_measurement» , который проверяет, больше ли число, чем самое высокое измерение, например say, 19 чашек больше, чем галлоны, затем он делает его 1 галлон и отправляет остатки вниз, но я никогда не использую пинты на кухне, поэтому, возможно, добавьте еще один вариант того, что его тоже нужно преобразовать. Я не знаю, что я застрял, и да, я знаю, что код является базовым, но подходит мне, наполовину в любом случае ..

Просто упаковывают вам нужен мой полный код, вот я идти:

class KitchenMeasurements 
{ 
    public double VolumeMeasurements(double number, string current_measurement, string to_measurement) 
    { 
     double mL = 0; 
     double tsp= 0; 
     double tbsp = 0; 
     double fluid_ounces = 0; 
     double cup = 0; 
     double pint = 0; 
     double quart = 0; 
     double gallon = 0; 
     double ounce = 0; 
     double gram = 0; 
     double pound = 0; 
     double liter = 0; 

     switch (current_measurement) 
     { 
      case "mL": 
       mL = number; 
       tsp = mL * 0.202884; 
       tbsp = mL * 0.067628; 
       fluid_ounces = mL * 0.033814; 
       cup = mL * 0.00422675; 
       pint = mL * 0.00211338; 
       quart = mL * 0.00105669; 
       gallon = mL * 0.000264172; 
       liter = mL * 0.001; 
       break; 

      case "tsb": 
       tsp = number; 
       mL = tsp * 4.92892; 
       tbsp = tsp * 0.333333; 
       fluid_ounces = tsp * 0.166667; 
       cup = tsp * 0.0208333; 
       pint = tsp * 0.0104167; 
       quart = tsp * 0.00520833; 
       gallon = tsp * 0.00130208; 
       liter = tsp * 0.00492892; 
       break; 

      case "tbsp": 
       tbsp = number; 
       mL = tbsp * 14.7868; 
       tsp = tbsp * 3; 
       fluid_ounces = tbsp * 0.5; 
       cup = tbsp * 0.0625; 
       pint = tbsp * 0.03125; 
       quart = tbsp * 0.015625; 
       gallon = tbsp * 0.00390625; 
       liter = tbsp * 0.0147868; 
       break; 

      case "fluid ounce": 
       fluid_ounces = number; 
       mL = fluid_ounces * 29.5735; 
       tsp = fluid_ounces * 6; 
       tbsp = fluid_ounces * 2; 
       cup = fluid_ounces * 0.125; 
       pint = fluid_ounces * 0.0625; 
       quart = fluid_ounces * 0.03125; 
       gallon = fluid_ounces * 0.0078125; 
       liter = fluid_ounces * 0.0295735; 
       break; 

      case "cup": 
       cup = number; 
       mL = cup * 236.588; 
       tsp = cup * 48; 
       tbsp = cup * 16; 
       fluid_ounces = cup * 8; 
       pint = cup * 0.5; 
       quart = cup * 0.25; 
       gallon = cup * 0.0625; 
       liter = cup * 0.236588; 
       break; 

      case "pint": 
       pint = number; 
       mL = pint * 473.176; 
       tsp = pint * 96; 
       tbsp = pint * 32; 
       fluid_ounces = pint * 16; 
       cup = pint * 2; 
       quart = pint * 0.5; 
       gallon = pint * 0.125; 
       liter = pint * 0.473176; 
       break; 

      case "quart": 
       quart = number; 
       mL = quart * 946.353; 
       tsp = quart * 192; 
       tbsp = quart * 64; 
       fluid_ounces = quart * 32; 
       cup = quart * 4; 
       pint = quart * 2; 
       gallon = quart * 0.25; 
       liter = quart * 0.946353; 
       break; 

      case "gallon": 
       gallon = number; 
       mL = gallon * 3785.41; 
       tsp = gallon * 768; 
       tbsp = gallon * 256; 
       fluid_ounces = gallon * 128; 
       cup = gallon * 16; 
       pint = gallon * 8; 
       quart = gallon * 4; 
       liter = gallon * 3.78541; 
       break; 

      case "liter": 
       liter = number; 
       mL = liter * 1000; 
       tsp = liter * 202.884; 
       tbsp = liter * 67.628; 
       fluid_ounces = liter * 33.814; 
       cup = liter * 4.22675; 
       pint = liter * 2.11338; 
       quart = liter * 1.05669; 
       gallon = liter * 0.264172; 
       break; 
     } 

     switch (to_measurement) 
     { 
      case "mL": 
       return mL; 
      case "tsb": 
       return tsp; 
      case "tbsp": 
       return tbsp; 
      case "fluid ounce": 
       return fluid_ounces; 
      case "cup": 
       return cup; 
      case "pint": 
       return pint; 
      case "quart": 
       return quart; 
      case "gallon": 
       return gallon; 
      case "ounce": 
       return ounce; 
      case "gram": 
       return gram; 
      case "pound": 
       return pound; 
      case "liter": 
       return liter; 
     } 

    } 
} 
+0

Кто бы ни проголосовал за этот пост, пожалуйста, добавьте к нему вопрос, чтобы на него можно было ответить. Замечание: пример кода показывает, что базовое наследование приводит к значительно более компактному коду в качестве стандартной замены для огромных операторов 'switch'. –

ответ

1

трудно точно сказать, что вы WER e ask for, но я видел это:

Теперь моя проблема в том, что мне нужно добавить опцию, в которой говорится: «Привет, он получает 17.50 чашек, давайте сделаем это 1 галлон и 1 1/2 чашки.

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

Ниже приведен пример кода, который должен вам помочь. Вам нужно будет заполнить пробелы.

public string ConvertToDescription(double amount, string originalMeasurement, params string[] toMeasurements) 
{ 
    StringBuilder sb = new StringBuilder(); 
    double valueToConvert = amount; 
    string priorMeasurement = originalMeasurement; 
    double displayAmount; 
    for (int i = 0; i < toMeasurements.Count; i++) 
    { 
     if (i > 0) 
      sb.Append(" "); 

      double convertedAmount = VolumeMeasurements(valueToConvert, priorMeasurement, toMeasurement[i]); 

      // Check if last item so we don't trim wanted decimals. 
      if (i < toMeasurements.Count - 1) 
       displayAmount = Math.Floor(convertedAmount) 
      else 
       displayAmount = convertedAmount; 

      valueToConvert = convertedAmount - displayAmount; 
      priorMeasurement = toMeasurements[i]; 

      // You will need to add logic here to display fractions if needed. 
      sb.AppendFormat("{0} {1}", displayAmount, toMeasurements[i]); 

      if (fixedAmount == 0) 
       break; 
    } 

    return sb.ToString(); 
} 

Имейте в виду, что все это не проверено, и я действительно надеюсь, что это то, о чем вы просили. Это должно привести вас к правильному пути. Вам нужно будет найти способ преобразования десятичных знаков в последнем преобразовании для отображения в виде фракций и реализации этого. Это, по крайней мере, даст вам «1 галлон 1,5 чашки»

+0

Спасибо за ответ, я буду работать над редактированием кода и рассказать вам, как это происходит, я понял, что я действительно не задавал вопрос, но да, вы правы, полагая, что мне нужна функция, чтобы сделать 17 1/2 чашек 1 галлон и 1 1/2 чашки, и у меня уже есть функция фракции. Я просто отделился от нее, потому что я только начал заниматься измерением, поэтому подумайте, над чем работать, и просто продолжать добавлять к ней. Я обычно делаю что-то, подсчитывая строки, но на самом деле я экспериментировал с операторами «switch», и они, похоже, отлично справлялись с этой задачей, поэтому мне не нужен был более компактный код. –

+0

Эта последняя часть там, на операторах switch, была больше в ответ на alexie там, я знаю, что они огромные инструкции switch, но мне хотелось узнать все части C# не только самым компактным или быстрым способом. –

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