例子
Dim x As Single, y As Single
x = Val(InputBox("X"))
Select Case x
Case Is >= 10
y = x ^ 2 + 1
Case Is >= -5
y = 0
Case Is < -5
y = x ^ 2 - 1
End Select
Print "x="; x, " "; "y="; y
我在修改Case Is >= 10变成case x>=10这两者有什么不同,为什么结果会不一样?
Select Case 表达式
Case 表达式列表1
语句组1
Case 表达式列表2
语句组2
Case 表达式列表3
语句组3
......
Case 表达式列表n
语句组n
Case Else
语句组n+1
End Select
注意:表达式的概念,可以是一个运算的式子,当然最简单的式子是一个变量或常量
执行过程如下:
首先:检查[表达式] 的值是否等于 “表达式列表1”的某个值 ,若相等,就执行 语句组1,然后结束该语句。如果不相等,就检查检查[表达式] 的值是否等于 “表达式列表2”的某个值,若相等,就执行 语句组2,然后结束该语句。如果不相等,就检查检查[表达式] 的值是否等于 “表达式列表3”的某个值,若相等,就执行 语句组3,然后结束该语句。......如果不相等,就检查检查[表达式] 的值是否等于 “表达式列表n”的某个值,若相等,就执行 语句组n,然后结束该语句。如果不相等,就就执行 语句组n+1,然后结束该语句。
在Case 表达式列表1中,允许使用 is 比较预算符的表达式,还允许 类似 1 To 10这样的范围表示等等。
其实:Case 后面的结果是布尔值,如果是True就执行下面的分支语句,如果是False就进入下一Case分支判断。
分析:假设你的x 值为30,因为首先判断 x 满足>=10否,是的就执行 y = x ^ 2 + 1,
当你改成
Case x >= 10的时候,系统最的判断是: x = x >= 10
这左边第1个X就是Select Case X里的X,系统先计算等号右边的式子 x > = 10结果为True,
然后判断 x = True,结果为显然是不等的,在VB里True转换为数字为-1,False转换为数字为0。
Case Is >= 10
y = x ^ 2 + 1
Case Is >= -5
y = 0
Case Is < -5
y = x ^ 2 - 1
End Select
中是x不能用Is的
要用is要改为Select Case is追问
能不能解释一下为什么不能用?
追答因为CASE的是x值不是is值。
追问那个 我的例子是正确的
这个我也运行来着也是正确的
但是
Select Case x
Case x >= 10
y = x ^ 2 + 1
Case >= -5
y = 0
Case x < -5
y = x ^ 2 - 1
End Select
这样修改时候就不对了~
有不同,在case x>= 的情况下,x=0,y=1;正确情况应该是x0,y=0
追答实际上是这样的,
Select Case x
也就是说 当X 等于下面的 Case Is >= 10中 ( >= 10)的时候做什么。
仔细分析了下。
也就是说 case is >=10 中的 >=10 是个表达式。
整个的意思就是说,当x >=10的时候。
而 case x>=10 的时候,
x>=10也是个表达式,当x是0时,其结果是个false。
那x肯定不等于false。所以进去了此分支。
得到的结果就是 x=0,y=1
(注意点,在vb中 false=0)
综上,IS 和 直接写表达式的区别就是 加上is ,比较的是 Select Case x
中的x 是否符合 is 后面的表示式。
没有加is的时候,是 x和 表达式的结果的比较。 而这个表达式(类似于x>=10)的结果,通常是个true,false。
我个人以前也没有注意到有这个区别,自己试验了下。
刚好也学习了。
希望对你有帮助