使用Case语句时的算术问题

问题描述 投票:0回答:2

我必须设计一个Windows窗体应用程序来计算给定组的百老汇门票的总成本。用户输入该组中的人数并计算总成本。我们必须使用案例陈述来实现这一目标。

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

  • 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,这是之前的组票价。

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

vb.net winforms case-statement
2个回答
1
投票

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

摆脱所有这些无用的案件,并保持<=。根据具体情况,您可能还想在底部添加Case Else,以防decNumber大于99。


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
© www.soinside.com 2019 - 2024. All rights reserved.