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

只需少循环一项:

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

如果您的“数量”数组增长并且仍在排序,则最佳和通用的答案是使用 BinarySearch 值“数量购买”。它会给你插入点,即。将密钥插入数组的点。使用此索引从折扣数组中返回适当的值。

我不提供代码,因为我不是 C# 用户,但实现应该不会很复杂。

干杯。

于 2012-07-19T10:09:26.157 回答
0

将 Double.MAX_VALUE 添加到数量数组的末尾:

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

试试这个 Linq 表达式。

return discount[discount.IndexOf(quantity.Where(x => x > quantityPurchased).DefaultIfEmpty().Max());

于 2012-07-19T10:57:12.827 回答