使 if 语句更整洁,不确定如何创建一个整洁的循环 JAVA 编程

Make if statement neater, unsure how to create a neat loop JAVA programming

  @Override
    int getDiscountRate(float priceThisYear, float priceLastYear) {
         float totalPrice;
        totalPrice = priceThisYear + priceLastYear;
        if (totalPrice >= 250 && totalPrice < 350) {
            return 5;
        } else if (totalPrice >= 350 && totalPrice < 450) {
            return 6;
        } else if (totalPrice >= 450 && totalPrice < 550) {
            return 7;
        } else if (totalPrice >= 550 && totalPrice < 650) {
            return 8;
        } else if (totalPrice >= 650 && totalPrice < 750) {
            return 9;
        } else if (totalPrice >= 750 && totalPrice < 850) {
            return 10;
        } else if (totalPrice >= 850 && totalPrice < 950) {
            return 11;
        } else if (totalPrice >= 950 && totalPrice < 1050) {
            return 12;
        } else if (totalPrice >= 1050 && totalPrice < 1150) {
            return 13;
        } else if (totalPrice >= 1150 && totalPrice < 1250) {
            return 14;
        } else if (totalPrice >= 1250 && totalPrice < 1350) {
            return 15;
        } else if (totalPrice >= 1350 && totalPrice < 1450) {
            return 16;
        } else if (totalPrice >= 1450 && totalPrice < 1550) {
            return 17;
        } else if (totalPrice >= 1550 && totalPrice < 1650) {
            return 18;
        } else if (totalPrice >= 1650 && totalPrice < 1750) {
            return 19;
        } else if (totalPrice >= 1750 && totalPrice < 1850) {
            return 20;
        }
        else if (totalPrice > 1850){
        return 20;
        }
          return 0;
    }

试图使代码看起来更整洁,最好是减少 else if 的数量,并可能实现某种形式的循环。

我们的想法是,当用户花费超过 350 美元时,折扣率从 5% 开始,然后每花费 100 美元再增加 1%,最大折扣为 20%

我知道对于有经验的程序员来说这很可能是微不足道的。该程序本身可以运行,但我知道这不是对其进行编码的最佳方式。

The idea is to have a discount rate which starts at 5 percent when the user has spent over 0 and then a further 1 percent with every 0 spent

你可以这样做:

int spent = 500;
if(spent > 350){
   int discount = 5 + (spent-350)/100;
}

可能需要进行一些调整,但您已经掌握了基本思路。另请注意,您发布的代码不符合您的上述要求。

我建议这样:

if(totalPrice >= 350) {
  int baseDiscount = 5;
  int additionalDiscount = (totalPrice - 350) / 100;
  if(additionalDiscount > 15) additionalDiscount = 15;

  return baseDiscount + additionalDiscount;
}
return 0;

那我们就简单的按照你说的说吧。如果超过 350,则增加 5%,然后每超过 100 美元增加 1%。我添加了您在代码中的 "max 20%" 规则。 :)

(没测试过)

免责声明 我根据 代码 写了这篇文章(购买时可享受 5% 的折扣 250 <= totalPrice < 350),而不是spec,它说 5% 应该从 350.

开始

首先,您正在重新检查边界;例如:

if (totalPrice >= 250 && totalPrice < 350) {
        return 5;
} else if (totalPrice >= 350 && totalPrice < 450) {

我们知道,如果我们没有输入第一个if,那么数量必须>= 350,除非是< 250。因此,如果您首先检查 250 条件,那么您当然可以减少代码:

if (totalPrice < 250) {
   return 0;
} else if (totalPrice < 350) {
   return 5;
} else if (totalPrice < 450) {
    return 6;

那么,我们到底在做什么?我们正在寻找 边界 ,我们映射 minSpend -> discountMap<Integer, Integer> 怎么样?我们需要使用 TreeMap 来维持秩序:

final Map<Integer, Integer> discounts = new TreeMap<>();
discounts.put(250, 5);
discounts.put(350, 6);
//and so on

为了找到折扣,我们在Map向后循环并找到小于totalPrice的第一个键:

for(final Entry<Integer, Integer> e : discounts.descendingMap().entrySet()) {
    if(e.geyKey() <= totalPrice) {
        return e.getValue();
    }
}
return 0;

这允许完全灵活地绑定到折扣映射。如果你有一些固定的规则,你似乎可以,那么你可以简单地用数学来描述它。

您有“250 分 5 分,然后每 100 分分 1 分”,归结为:

return totalPrice < 250 ? 0 : 5 + (totalPrice - 250)/100

如果我没看错的话,它是 (value - 250) / 75 的下限

也许试试:

int minDiscount = 5;

if (totalPrice < 250) {
   return 0;
}

return Math.Floor((totalPrice - 250) / 75) + minDiscount;

要求:消费 350 时 5%,之后每 100+1%

第 1 步:存储花费的金额。 第 2 步:检查花费的金额,并应用必要的折扣。我会使用 subtraction/mod 方法。 第 3 步:return 折扣百分比。

实施:

public static int discountPrice(int moneySpent) {
    int percentage = 0;

    // get out early if it's less than the needed amt
    if (moneySpent < 350) {
        return percentage;
    }
    // if at least 350 was spent
    if (moneySpent >= 350) {
        percentage += 5; // add 5 to the percentage
        moneySpent -= 350; // subtract 350 since we've already accounted for it
    }
    // while loop to calculate bonus percentage
    while (moneySpent >= 100) {
        percentage += 1; // add one to the percentage.
        moneySpent -= 100;
    }

    // return a max of 20
    if (percentage > 20) { percentage = 20; }
    return percentage;
}

把它放在像这样的函数中可以很容易地更改价格 - 折扣值。可以在第二个 if 块中轻松修改基本百分比,以及需要花费的最低金额(第一和第二)。每 x 价格的百分比增加也可以在最后一个块中轻松修改。