Dim a, b, c, d As Integer
a = Text1.Text
b = Text2.Text
c = Text3.Text
If a > b Then
d = a: a = b: b = d
End If
If b > c Then
d = b: b = c: c = d
End If
If a > b Then
d = a: a = b: b = d
End If
Label1.Caption = a & "," & b & "," & c
我想知道这个算法的错误在哪,其他正确的算法不用回答,我已经知道了。
我相信网上牛人多
你是认真的吗,伙子?
追答我当然是认真的,在VB6中,Dim a, b, c, d As Integer 相当于
Dim a
Dim b
Dim c
Dim d As Integer
也就是说a、b、c并不是你预期的Integer型,而是默认的Variant型。只有d才是Integer型。
此外,文本框的Text属性本身是String型,即使文本框中输入的是数字,它也是String型,这样的话Variant型的a、b、c分别赋值为Text1、Text2、Text3的Text属性后,它们也等价于String型,这样它们之间就会按字符串来比较大小(而不是按数字),比如"123">"4"的结果将会是False!这样整个排序过程就都不正常了!
所以正确的变量声明方法为:
Dim a As Integer, b As Integer, c As Integer, d As Integer
顺便说一下,这是初学者最容易犯的错误,甚至一些大学里教VB的老师也是这样教的(Dim a, b, c, d As Integer这样的声明方法大多数情况下并不会造成错误,特殊情况下才会引起程序逻辑错误,所以一般人不太注意)