我正在尝试理解switch
声明。
所以我有这个问题,我已经解决了。
“一家软件公司出售零售价为99美元的套餐。数量折扣
根据以下内容:
10-19 = 20%
20-49 = 30%
50-99 = 40%
100或更多= 50%
编写一个程序,要求用户输入购买的包裹数量。然后程序应显示折扣金额(如果有)和金额的总金额 折扣后购买。
我使用if
else if
结构和几个关系运算符解决了它,它看起来像这样
//Determine total price based on discounts
if (x >= 10 && x <= 19)
{
total = (((x*99) - (x * 99)* .2));
JOptionPane.showMessageDialog(null, "Your total is $" + total
+ " with a 20% discount");
}
else if(x >= 20 && x <= 49)
{
total = (((x*99) - (x * 99)* .3));
JOptionPane.showMessageDialog(null, "Your total is $" + total
+ " with a 30% discount.");
.
.
.
我想知道是否可以将可能的数字范围存储在单个变量中,然后将其用于case
语句?在这种情况下使用switch
语句是否有意义?我尝试将一系列可能的数字(实际上是一个表达式,存储在一个声明为Boolean
的变量中)拟合到一个变量中,但是因为我将变量(x)声明为任何数字的解析Integer
值。 JOptionPane
输入对话框的用户输入不允许我使用布尔变量。所以我仍然对switch
语句的确切运作方式感到有些困惑,但我很感激在使用switch
语句时对任何内容有何帮助。
答案 0 :(得分:4)
怎么样
if(total >= 100)
{
//use 50%
}
else if(total >= 50)
{
//use 40%
}
else if(total >= 20)
{
//use 30%
}
else if(total >= 10)
{
//use 20%
}
else
{
//no discount
}
如果您到达total >= 50
的其他人,则您已经知道total < 100
。等等。当您可以根据之前的语句推断条件时,这就是使用好if..else if..else
语句的原因。如果您只使用if语句,那么您现在的代码将是等效的。
另外
total = (((x*99) - (x * 99)* .2));
会更好地写成
total = x * 99 * (1-.2)
答案 1 :(得分:1)
不,switch
语句不支持范围。
从另一端考虑,考虑将您的可用折扣存储在enum
中,并使用abstract
applyDiscount
方法检查每个折扣是否适用并将其应用于金额