使用 Case 语句时的算术问题
Arithmetic problem when using Case statements
我必须设计一个 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,这是之前的团体票价。
我觉得我错过了什么,但我的教科书和教授几乎没有涵盖这些类型的陈述
你所有的 >=
案例都没有用,实际上是有害的。例如,如果你到达 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
我必须设计一个 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,这是之前的团体票价。
我觉得我错过了什么,但我的教科书和教授几乎没有涵盖这些类型的陈述
你所有的 >=
案例都没有用,实际上是有害的。例如,如果你到达 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