0

私はあなたの天才にとっておそらく非常に単純なことを考えすぎています。:)

私は3つの異なるタイプの資産に対して別々の入力を持っていますが、それらはすべて同じ4つの選択肢があります。

  1. なし
  2. 1
  3. 3つ以上

ユーザーが選択した特定の資産の合計数量のコストを個別に計算しています。各アセットはコストに100ドルを追加します。したがって、コードにそれが含まれています。

public static decimal priceAsset { get { return 100; } }

したがって、資産の種類ごとに、次のように計算します。

  1. ユーザーはnone=$0を選択します
  2. ユーザーは「1つ」を選択します=priceAsset
  3. ユーザーは「2」を選択します=priceAsset * 2
  4. ユーザーは「3つ以上」を選択します= priceAsset * 3(3つを超えるすべての資産にはそれぞれ100ドルが追加されることにも注意してください)。

ここで、これを3つの異なるタイプのアセットに対して個別に行うことを覚えておいてください。これらの資産は、資産、車両、または「その他の」資産(この順序で)です。入力は線形であるため、順序は重要だと思います。ユーザーはプロパティから始めて、車両または「その他」に移動する前に選択する必要があります。

これは私の計算ではうまく機能しますが、アプリケーションで特定の無関係な条件が当てはまる場合は、最初のアセット(任意のアセットタイプ)に対してのみ100ドルを請求したくないと判断しました。

私の問題は、最初の100ドルを請求するかどうかを決定するために、1つ以上が選択されたかどうかを判断するために、他の2つの資産のいずれかを比較するロジックを適切に理解できないことです。

それが明確でない場合は、例を挙げましょう。基本的に、最初の資産には100ドルの請求は発生しませんが、それ以降のすべての資産には発生することを伝えています。

  • ユーザーがアセットタイププロパティの「1つ」、「2つ」、または「3つ以上」を選択すると、最初のプロパティは無料ですが、タイププロパティの2つ以上のアセットには、それぞれ100ドルの料金が発生し、数量は同じです。資産タイプの車両または「その他」の。
  • ユーザーがアセットタイプのプロパティの「なし」を選択し、アセットタイプの車両の「1」、「2」、または「3つ以上」を選択すると、最初の車両は無料ですが、タイプの車両の2つ以上のアセットにはそれぞれ100ドルの請求があり、「その他」の資産タイプの数量は同じです。
  • 「その他」のアセットについても同じです。
  • 3つのタイプの資産すべての「なし」は$0を返します。

これが私がプロパティを行う方法の例です(コード蒸留):

        if One
            {
               priceAsset 
            }
        else if Two
            { 
               priceAsset * 2
            }
        else if ThreeOrMore
            {                
                priceAsset * 3
            }
        else
            { 
                $0
            }

VehcileとOtherAssetについても同じことをします。

さて、これが1つのタイプのアセットだけである場合、最初の「$ 0」を作成し、2番目と3番目を変更してこれを簡単に行うことができますが、他の2つのタイプのアセットをチェックすることになります。私は文字通り他のすべてのアセットをと比較し始めました||が、それは11の比較であり、もっと簡単な方法があると思いました。さらに、すべてのブランチでそれを実行する必要があると考えています(つまり、11 *(3つのアセットタイプ*各3つのブランチ)、そしてそれはばかげているように聞こえます。

どんなガイダンスでも大歓迎です。私は十分に説明的であったことを願っています(しかし過度にそうではありません)。

4

1 に答える 1

1

あなたが言っているのは、そのプロパティと1つが選択された場合を除いて、すべてのアセットタイプに同じ(パターン)を請求したいということです(この場合、値を0にします)

このような列挙型を想定すると:

public enum AssetType {
    Property,
    Vehicle,
    Other
}
public enum AssetCount {
    None,
    One,
    Two,
    ThreeOrMore
}

この機能を使用して、価格を決定することができます。

public static decimal GetPrice( 
        AssetType assetType, 
        AssetCount assetCount, 
        decimal unitPrice 
    ) {

        //Handle Exceptional case first
        if( assetType == AssetType.Property ) {
            if (assetCount == AssetCount.One){
                return 0;
            }
        }
        switch( assetCount ) {
            case AssetCount.None:
                return 0;
            case AssetCount.One:
                return ( unitPrice );
            case AssetCount.Two:
                return ( unitPrice * 2 );
            case AssetCount.ThreeOrMore:
                return ( unitPrice * 3);

        }
        throw new Exception( "Unsupported AssetCount" );
}
于 2012-07-20T20:51:06.370 に答える