@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;
}
尝试使代码看起来更整洁,最好是减少其他ifs的数量,并且可能实现某种形式的循环。
我们的想法是,当用户花费超过350美元时,折扣率从5%开始,然后每消费100美元再折扣1%,最高折扣率为20%
我理解为有经验的程序员,这很可能是微不足道的。程序本身有效但我知道这不是编码它的最佳方法。
答案 0 :(得分:2)
我建议这样的事情:
if(totalPrice >= 350) {
int baseDiscount = 5;
int additionalDiscount = (totalPrice - 350) / 100;
if(additionalDiscount > 15) additionalDiscount = 15;
return baseDiscount + additionalDiscount;
}
return 0;
然后我们只是按照你说的话说。 5%,如果超过350,那么每100美元以上增加1%。我添加了代码中的“最大20%”规则。 :)
(尚未测试过)
答案 1 :(得分:1)
免责声明我是根据代码(为购买250 <= totalPrice < 350
提供5%的折扣)写的,而不是规格,即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;
那么,我们在这里做的是什么?我们正在寻找界限,我们映射Map<Integer, Integer>
的{{1}}怎么样?我们需要使用minSpend -> discount
维护订单:
TreeMap
为了找到折扣,我们将{em>向后循环到final Map<Integer, Integer> discounts = new TreeMap<>();
discounts.put(250, 5);
discounts.put(350, 6);
//and so on
上,找到小于Map
的第一个键:
totalPrice
这允许完全灵活地绑定折扣映射。如果您有一些固定的规则,那么您可以简单地用数学方法对其进行描述。
你有&#34; 5在250然后另外1为每100&#34;归结为:
for(final Entry<Integer, Integer> e : discounts.descendingMap().entrySet()) {
if(e.geyKey() <= totalPrice) {
return e.getValue();
}
}
return 0;
答案 2 :(得分:1)
要求:350%花费5%,之后每100次+ 1%
第1步:存储花费的费用。 第2步:检查花费,并应用必要的折扣。我会使用减法/ mod方法。 第3步:返回折扣百分比。
实现:
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块中轻松修改基本百分比,以及需要花费的最小资金(第一个和第二个)。每个价格的百分比增长也可以在最后一个块中轻松修改。
答案 3 :(得分:0)
我们的想法是,当用户花费超过350美元时,折扣率从5%开始,然后每花费100美元再折扣1%
你可以这样做:
int spent = 500;
if(spent > 350){
int discount = 5 + (spent-350)/100;
}
可能需要一些调整,但你得到了基本的想法。另请注意,您发布的代码不符合您的上述要求。
答案 4 :(得分:0)
如果我看得正确,那就是(值 - 250)/ 75
的最低点也许试试:
int minDiscount = 5;
if (totalPrice < 250) {
return 0;
}
return Math.Floor((totalPrice - 250) / 75) + minDiscount;