VB控制台程序条件判断修正:1-7数字判断工作日/周末
解决VB中条件判断的逻辑错误
你说得完全对,问题就出在If num1 = 1 Or 2 Or 3...这个条件语句的写法上!在Visual Basic里,逻辑运算符Or需要两侧都是完整的布尔表达式,你那样的简写方式会被VB误解:2、3这些数字会被当作布尔值处理(非零数值在VB里等价于True),所以不管你输入什么数字,这个If条件都会永远成立,导致后面的ElseIf和Else分支根本不会执行。
下面给你几种正确的写法,你可以根据需求选择:
1. 完整的逻辑判断写法
把每个条件都完整地和num1比较,确保每个子表达式都是布尔值:
If num1 = 1 Or num1 = 2 Or num1 = 3 Or num1 = 4 Or num1 = 5 Then Console.WriteLine("Weekday") ElseIf num1 = 6 Or num1 = 7 Then Console.WriteLine("Weekend") Else Console.WriteLine("Beep! error, enter number from 1 to 7") End If
如果追求更高效的短路判断,可以把Or换成OrElse,这样只要前面的条件满足,后面的就不会再判断了。
2. 范围判断写法
对于连续的数值范围,用>=和<=结合AndAlso会更简洁:
If num1 >= 1 AndAlso num1 <= 5 Then Console.WriteLine("Weekday") ElseIf num1 = 6 OrElse num1 = 7 Then Console.WriteLine("Weekend") Else Console.WriteLine("Beep! error, enter number from 1 to 7") End If
3. 使用Select Case(推荐)
对于这种多分支的数值判断,VB的Select Case语法会让代码更清晰易读:
Select Case num1 Case 1 To 5 Console.WriteLine("Weekday") Case 6, 7 Console.WriteLine("Weekend") Case Else Console.WriteLine("Beep! error, enter number from 1 to 7") End Select
另外还要提醒你一个小问题:你的代码里直接把Console.ReadLine()的结果赋值给Integer类型的num1,如果用户输入的不是数字,程序会直接崩溃。可以用Integer.TryParse来处理这种情况,让程序更健壮:
Dim num1 As Integer Console.WriteLine("Enter a number from 1 to 7") Dim input As String = Console.ReadLine() If Integer.TryParse(input, num1) Then ' 这里放上面的判断逻辑(比如Select Case) Select Case num1 Case 1 To 5 Console.WriteLine("Weekday") Case 6, 7 Console.WriteLine("Weekend") Case Else Console.WriteLine("Beep! error, enter number from 1 to 7") End Select Else Console.WriteLine("Beep! error, please enter a valid number from 1 to 7") End If Console.ReadKey()
内容的提问来源于stack exchange,提问作者Subhanshu Prasad
相关产品推荐
相关产品推荐

