3

よし、私はキッチンの測定用のクラスを書いてきた。今のところ、それは体積、または液体、測定値を持っているだけで、私はそれを次のように呼んでいる:

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

そこから、ほとんどの人が内部コードを理解するのは非常に簡単です。そこにある簡単な計算だけです。今私の問題は、「ねえ、彼は 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;
        }

    }
}
4

1 に答える 1

1

あなたが求めていたものを正確に伝えるのは難しいですが、私はこれを見ました:

今私の問題は、「ねえ、彼は 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カップ」が得られます

于 2013-05-27T07:26:09.093 に答える