【问题标题】:range of values in a switch statement [duplicate]switch语句中的值范围[重复]
【发布时间】:2013-10-07 19:42:27
【问题描述】:

我试图理解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 语句时发生的事情和不发生的事情提供任何帮助。

【问题讨论】:

    标签: java


    【解决方案1】:

    怎么样

    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 &gt;= 50 的else if,您已经知道total &lt; 100。等等。当您可以根据前面的语句推断条件时,这确实是使用良好的 if..else if..else 语句的原因。如果您只使用 if 语句,您现在的代码将是等效的。

    还有

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

    最好写成

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

    【讨论】:

    • 感谢@cruncher。我有一个问题,我显然不是数学家,请问为什么写成 x*99*(1-.2) 更好,我试过了,你是对的,它给出的答案与我写它的时间更长。但我无法理解 1-.2 部分。
    • @user2855985 大多数人会认为第二种形式更易于阅读和理解。从代数我们知道 (X+Y) * Z == XZ + YZ。 Cruncher 使用它来简化表达式。
    • @user2855985 正如 PaulWagland 所说,分配(以及乘法的交换属性,因为我去掉了一些括号)属性是正确的。不过,这并不是我的看法。具体来说,我直观地将其视为:20% off the price, is the same as 80% of the price。同样在这种情况下,您可以将 1-.2 评估为 .8,但编译器应该为您执行此操作。以这种形式保留它可以更容易地在以后引入一个变量来表示百分比。
    • @PaulWagland 我也怀疑这会运行得更快(尽管可能几乎可以忽略不计)。不确定在表达式中出现两次 x*99 会优化多少 java..
    • 好的,我明白了为什么这样更容易,当你说它更容易在将代表的变量中使用表达式时。百分比,你的意思是像用 x*(1-.2) 初始化变量一样: double percent = x * (1-.2) ?
    【解决方案2】:

    不,switch 语句不支持范围。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2016-08-26
      • 2012-11-23
      相关资源
      最近更新 更多