switch语句中的值范围

时间:2013-10-07 19:42:28

标签: java

我正在尝试理解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语句时对任何内容有何帮助。

2 个答案:

答案 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方法检查每个折扣是否适用并将其应用于金额