大虾们 帮我看看下面代码,想要的功能是将一整型数组元素按从小到大排列并输出
Private Sub Form_Click()
    Dim a() As Integer
    Dim i, j, temp As Integer
    Dim sh As String
    a = Array(2, 4, 87, 389, 39, 0, 84, 29, 46, 75)
    sh = ""
    For i = 1 To 9
        For j = 1 To 10 - i
            If a(j) > a(j + 1) Then
            temp = a(j)
            a(j) = a(j + 1)
            a(j + 1) = temp
            End If
        Next j
    Next i
    For i = 1 To 10
        sh = sh & " " & a(i)
    Next i
    Print "从小到大排序为"
    Print sh
End Sub

解决方案 »

  1.   


    Option Explicit
    Private Sub Form_Click()
        Dim a As Variant
        Dim i, j, temp As Integer
        Dim sh As String
        a = Array(2, 4, 87, 389, 39, 0, 84, 29, 46, 75)
        sh = ""
        For i = 0 To 8
            For j = i To 9
                If a(i) > a(j) Then
                temp = a(i)
                a(i) = a(j)
                a(j) = temp
                End If
            Next j
        Next i
        For i = 0 To 9
            sh = sh & " " & a(i)
        Next i
        Print "从小到大排序为"
        Print sh
    End Sub
      

  2.   

    谢谢 搞定了 顺便帮我分析为什么我用
             For j = 1 To 10 - i 
                If a(j) > a(j + 1) Then 
                temp = a(j) 
                a(j) = a(j + 1) 
                a(j + 1) = temp 
                End If 
            Next j 
    就不行,溢出错误
    明天加分现在加不了
      

  3.   


    Option Explicit
    '这样也可以.
    Private Sub Form_Click()
        Dim a()    '这个地方改为 dim a as Variant 或 dim a() (后面不要说明类型 因为你后面采用的是 Array 方法。要不会出错)
        Dim i, j, temp As Integer
        Dim sh As String
        a = Array(2, 4, 87, 389, 39, 0, 84, 29, 46, 75)
        sh = ""
        
        For i = 0 To 9   '(数组坐标是从0 至 9) 不是 1 至 10 所以都要减 1
            For j = 0 To 8 - i '(数组坐标是从0 至 9) 不是 1 至 10 所以都要减 1
                If a(j) > a(j + 1) Then
                temp = a(j)
                a(j) = a(j + 1)
                a(j + 1) = temp
                End If
            Next j
        Next i
        For i = 0 To 9
            sh = sh & " " & a(i)
        Next i
        Print "从小到大排序为"
        Print sh
    End Sub
      

  4.   

    当i=1时,j=1 To 10 - i 可以为9,j + 1 为10,a 数组的上标为9,当然溢出;
    If a(j) > a(j + 1) Then 
                temp = a(j) 
                a(j) = a(j + 1) 
                a(j + 1) = temp 
                End If 

    这段代码是有问题的,循环要用每一个a(i)值去和别的值---a(j) 去比较,并将小的数前移,就需要将它改为
    If a(i) > a(j) Then
                temp = a(i)'记录较大的数
                a(i) = a(j)'将较小的数前移
                a(j) = temp'将较大的数后移
      

  5.   

    Option Explicit
    '这样也可以.
    Private Sub Form_Click()
        Dim a()    '这个地方改为 dim a as Variant 或 dim a() (后面不要说明类型 因为你后面采用的是 Array 方法。要不会出错)
        Dim i, j, temp As Integer
        Dim sh As String
        a = Array(2, 4, 87, 389, 39, 0, 84, 29, 46, 75)
        sh = ""
        
        For i = 0 To 8 '{改为8就行了,没有必须再循环一次.}   '(数组坐标是从0 至 9) 不是 1 至 10 所以都要减 1
            For j = 0 To 8 - i '(数组坐标是从0 至 9) 不是 1 至 10 所以都要减 1
                If a(j) > a(j + 1) Then
                temp = a(j)
                a(j) = a(j + 1)
                a(j + 1) = temp
                End If
            Next j
        Next i
        For i = 0 To 9
            sh = sh & " " & a(i)
        Next i
        Print "从小到大排序为"
        Print sh
    End Sub
      

  6.   

    这里For j = 0 To 8 - i
    8-i怎么确定的
      

  7.   


    For j = 0 To 8 - i '数据下标是9 
          If a(j) > a(j + 1) Then 'A(j+1) 'J+1 最大值不能超为 9(下标) J+1=9: J=8
      

  8.   

    谢谢 fvflove 
    我申请入群了