0

quantityPurchased が 200 以上の場合に、if、if else、else、または switch ステートメントを使用せずに配列の範囲外にならないようにするにはどうすればよいですか。

static double DeterminePercentage(int quantityPurchased)
{
    double[] quantity = { 1, 11, 50, 100, 200 };
    double[] discount = { 0, 7.5, 15, 17.5, 20 };
    int x = 0;
    for (int i = 0; i < quantity.Length; i++)
    {
        if (quantityPurchased >= quantity[i] && quantityPurchased < quantity[i + 1])
        {
            x = i;
        }
        break;
    }

    return discount[x];
}
4

4 に答える 4

0

数量配列の末尾に Double.MAX_VALUE を追加します。

double[] quantity = { 1, 11, 50, 100, 200, Double.MAX_VALUE };
于 2012-07-19T10:23:07.537 に答える
0

この Linq 式を試してください。

割引を返します[discount.IndexOf(quantity.Where(x => x > amountPurchased).DefaultIfEmpty().Max());

于 2012-07-19T10:57:12.827 に答える
0

ループする項目を 1 つ減らすだけです。

for (int i = 0; i < quantity.Length - 1; i++) {

コードを >200 の値で機能させるには、別のダミー項目を追加できます。

double[] quantity = { 1, 11, 50, 100, 200, Int32.MaxValue };
double[] discount = { 0, 7.5, 15, 17.5, 20, 100 };

これは、200 から Int32 の間の数量になります。MaxValue には 20% の割引があります。

于 2012-07-19T10:03:24.157 に答える
0

「quantity」配列が大きくなり、まだソートされている場合、最適かつ一般的な答えは、値「quantityPurchased」に BinarySearch を使用することです。挿入ポイントが表示されます。キーが配列に挿入されるポイント。このインデックスを使用して、割引配列から適切な値を返します。

私は C# ユーザーではないのでコードは提供しませんが、実装はそれほど複雑ではありません。

乾杯。

于 2012-07-19T10:09:26.157 に答える