使用Case语句时的算术问题

时间:2019-03-13 23:28:25

标签: vb.net winforms case-statement

我必须设计一个Windows Forms应用程序,该应用程序可以计算给定组的百老汇门票的总费用。用户输入组中有多少人,并计算总成本。我们必须使用case语句来完成此任务。

百老汇票务团体折扣如下:

  • 1-8 = 249美元
  • 9-12 = $ 219
  • 13-24 = 199美元
  • 25-99 = 169美元

我遇到的麻烦是让某些情况下使用给定的算法。前两组(1-8和9-12)可以正常工作,但是程序继续计算,好像13-24组的折扣仍然是$ 219。 25-99组的情况相同。

我的代码(txtNumber是文本框对象,lbltotal是总标签)

Option Strict On

Public Class frm_broadway_ticket_group
    Private Sub btnCalculate_Click(sender As Object, e As EventArgs) 
      Handles btnCalculate.Click
        Dim decTotal1 As Decimal
        Dim decNumber As Decimal

        decNumber = Convert.ToDecimal(txtNumber.Text)

        Select Case decNumber
            Case Is <= 8
                decTotal1 = decNumber * 249
            Case Is >= 9
                decTotal1 = decNumber * 219
            Case Is <= 12
                decTotal1 = decNumber * 219
            Case Is >= 13
                decTotal1 = decNumber * 199
            Case Is <= 24
                decTotal1 = decNumber * 199
            Case Is >= 25
                decTotal1 = decNumber * 169
            Case Is <= 99
                decTotal1 = decNumber * 169
        End Select

        lbltotal.Text = decTotal1.ToString("C")
    End Sub
End Class

TLDR:我要做的是将13-24的组乘以199,将25-99的组乘以169。两个组仅乘以219,这是上一个组的票证价格。

我感觉自己缺少一些东西,但是我的教科书和教授几乎没有涵盖这些类型的陈述

2 个答案:

答案 0 :(得分:1)

您所有的>=案例都没有用,实际上是有害的。例如,如果您达到Case Is <= 12,那么您就已经知道自己与Case Is <= 8不匹配,因此您知道该值大于或等于9,所以测试的重点是什么?那个吗这意味着该案例是无用的,但更糟糕的是,Case Is >= 9将匹配9以上的任何值,因此您的其他任何案例都将无法进行测试。

摆脱所有那些无用的情况,只保留<=个。根据具体情况,如果Case Else大于99,您可能还需要在底部添加decNumber

答案 1 :(得分:1)

为什么可以在使用To时使用那些?

        Case Is <= 8
            decTotal1 = decNumber * 249
        Case 9 To 12
            decTotal1 = decNumber * 219
        Case 13 To 24
            decTotal1 = decNumber * 199
        Case 25 To 99
            decTotal1 = decNumber * 169