0

我试图理解这个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

4

2 回答 2

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
}

如果你达到 else if for total >= 50,你已经知道了total < 100。等等。if..else if..else当您可以根据前面的语句推断条件时,这确实是使用好语句的原因。如果您只使用 if 语句,您现在的代码将是等效的。

total = (((x*99) - (x * 99)* .2));

最好写成

total = x * 99 * (1-.2)
于 2013-10-07T19:49:38.353 回答
1

不,switch语句不支持范围。

从另一端考虑,考虑将可用折扣存储在一个方法中,enum并使用一种abstract applyDiscount方法来检查每个折扣是否适用并将其应用于金额。

于 2013-10-07T19:46:20.153 回答