使 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 -> discount
的 Map<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 价格的百分比增加也可以在最后一个块中轻松修改。
@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 -> discount
的 Map<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 价格的百分比增加也可以在最后一个块中轻松修改。