使用 Case 语句时的算术问题

Arithmetic problem when using Case statements

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

百老汇门票团体优惠如下:

我遇到的问题是让某些情况下使用给定的算法。前两组(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,这是之前的团体票价。

我觉得我错过了什么,但我的教科书和教授几乎没有涵盖这些类型的陈述

你所有的 >= 案例都没有用,实际上是有害的。例如,如果你到达 Case Is <= 12 那么你已经知道你没有匹配 Case Is <= 8 所以你知道这个值大于或等于 9 的事实,那么测试的重点是什么那是什么?这意味着那个案例是无用的,但更糟糕的是,Case Is >= 9 将匹配任何大于 9 的东西,所以你的其他案例中的 none 将被测试。

去掉所有那些无用的案例,只保留 <= 个。根据具体情况,您可能还想在底部添加 Case Else,以防 decNumber 大于 99。

既然可以使用 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