求救啊 这段程序有什么错的啊 狂不爽啊

来源:百度知道 编辑:UC知道 时间:2024/05/22 17:41:42
Function paixu(ByVal i As Integer)
paixu = False
str1 = Str(i)
l = Len(str1)
Dim j As Integer
Dim a() As Integer
For j = 1 To l
a(j) = Val(Mid(str1, j, 1))
Next
For m = 1 To l - 1
For n = m + 1 To l
If a(m) > a(n) Then
t = a(m): a(m) = a(n): a(n) = t
End If
Next
Next
str1 = ""
For m = 1 To l
paixu = paixu + Str(a(n))
Next
End Function

Private Sub Command1_Click()
i = Val(Text1.Text)
Print paixu(i)
End Sub

原程序主要有三个问题:
第1,函数传递的参数设为Double,可以给更大的数重新排序,如果只是Integer,i=45678时,就会溢出了
第2,a()用Redim进行再次定义,并限制上下标
第3,paixu = paixu + Str(a(n)) 中的数组下标n,和循环体不一致

因此,代码改动如下,你可以再试试:
Function paixu(ByVal i As Double)
str1 = CStr(i)
l = Len(str1)
Dim j As Integer
ReDim a(1 To l)
For j = 1 To l
a(j) = Val(Mid(str1, j, 1))
Next

For m = 1 To l - 1
For n = m + 1 To l
If a(m) > a(n) Then
t = a(m): a(m) = a(n): a(n) = t
End If
Next
Next
For m = 1 To l
paixu = paixu & a(m)
Next
End Function

Private Sub Command1_Click()
Dim i As Double
i = Val(Text1.Text)
Print paixu(i)
End Sub

Function paixu(ByVal i As Integer)
str1 = CStr(i)
l = Len(str1)
Dim j As Integer
ReDim a(l)
For j = 1 To l
a(j) = Val(Mid(str1, j, 1))
Next

For m = 1 To l - 1
For n = m + 1 To l
If a(m) > a(n) Then
t = a(m): a(m) =