2013-05-27 5 views
2

Alrighty, 그래서 나는 지금, 부엌 측정을위한 클래스를 쓰고있다 그냥 볼륨, 또는 액체, 측정을 가지고 있으며, 나는 다음과 같이 호출 :C# 측정 변환 클래스

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

거기에서 그것의 perty는 대부분의 사람들이 내부 코드를 알아내는 것이 간단하고, 간단한 수학이 있습니다. 이제 내 문제는 '이봐, 그는 17.50 컵을 가져다가 1 갤런과 1 1/2 컵을 만들 수있는 옵션을 추가해야합니다.

나는 'to_measurement'에 새 케이스를 추가하려고 생각했다. 그 숫자가 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 정확히 얘기하기 어렵다 전자 요청,하지만이 봤어 :

지금 내 문제는 내가라는 옵션을 추가 할 필요가있다 '헤이 그가 17.50 컵 GOTS, 그것을 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 갤런 및 1 1/2 컵, 그리고 나는 이미 분수 기능을 가지고 있습니다. 단지 측정 항목을 시작했기 때문에 분리되어 있습니다. 그래서 작업 할 항목이 될 것이며, 계속 추가 할 것입니다. 저는 보통 라인을 통해 셀 수있는 일을하지만 실제로 'switch'문을 실험하고있었습니다. 그리고 그 작업을 잘한 것처럼 보였으므로 더 컴팩트 한 코드가 실제로 필요하지 않았습니다. –

+0

스위치 문장의 마지막 부분은 거기에있는 alexie에 대한 답이 더 많았습니다. 나는 거대한 switch 문이라고 알고 있지만, C#의 모든 부분을 배우는 것이 가장 컴팩트하거나 빠른 방법이 아닌 것 같았습니다. –