本人vb是個初學者,現在碰到一難題,請求各位大神給予幫助!本人非常感謝!運行界面如下:

程式運行后,用戶單擊“開始排序”按鈕后,出現一個輸入框,請求用戶輸入陣列元素的個數,程式隨機生成相應個數的2位數,并將它們逐個顯示在左邊的list1串列框中,然后將每個陣列元素的下標按其對應的陣列元素值進行從大到小的排序,將將這些下標顯示在右邊的串列框2中,我撰寫了代碼,但有一個很大的缺陷:就是當每個陣列元素的值不相同時,下標顯示是完全正常的;當其中出現相同的陣列元素時,下標顯示中就會出現空專案。代碼如下:
Private Sub Command1_Click()
Dim i%, j%
Dim n% '陣列元素的個數
Dim a%()
n = Val(InputBox("請輸入陣列元素的個數"))
ReDim a%(1 To n)
Randomize
For i = 1 To n
a(i) = Int(100 * Rnd + 10)
List1.AddItem Str(a(i)) & " " & i
List2.AddItem ""
Next i
Dim k%, m%
For i = 1 To n
k = 1
For j = 1 To n
If a(i) < a(j) Then k = k + 1
Next j
List2.List(k - 1) = Str(i)
Next i
End Sub
請各位大師指點迷律!
uj5u.com熱心網友回復:
Private Sub Command1_Click()
Dim n As Integer, i As Integer, j As Integer, k As Integer
Dim a() As Integer
n = Val(InputBox("?"))
ReDim a(1 To n)
Dim b() As Integer
ReDim b(1 To n)
a(1) = 22: a(2) = 24: a(3) = 23: a(4) = 23: a(5) = 14
Randomize
For i = 1 To n
a(i) = Int(Rnd * 90 + 10)
List1.AddItem a(i) & " " & i
b(i) = i
Next i
Dim t As Integer
For i = 1 To n
For j = i + 1 To n
If a(b(i)) < a(b(j)) Then
t = b(j): b(j) = b(i): b(i) = t
End If
Next j
List2.AddItem a(b(i)) & " " & b(i)
Next i
End Sub
uj5u.com熱心網友回復:
其中有一行a(0)=22:a(1)=24啥的請無視……
uj5u.com熱心網友回復:
那你可以想辦法在隨機出重復的時候,再取一次,知道不重復。uj5u.com熱心網友回復:
老師,上次是我沒把事情說得很清楚,現在我把該題的具體要求以截圖的方式展現給大家,請老師再給予指點。謝謝!
uj5u.com熱心網友回復:
Private Sub Command1_Click()
'不清空,只能一次測驗,鄙視之……'
List1.Clear
List2.Clear
Dim i%, j%
Dim n% '陣列元素的個數
Dim a%()
n = Val(InputBox("請輸入陣列元素的個數"))
ReDim a%(1 To n)
Randomize
For i = 1 To n
a(i) = Int(100 * Rnd + 10)
List1.AddItem Str(a(i)) & " " & i
List2.AddItem ""
Next i
Dim k%, m%
For i = 1 To n
k = 1 '用來統計 a(i) 在排序后是第k名'
For j = 1 To n
If a(i) > a(j) Then k = k + 1 '所以應該判斷比a(i)小的個數'
Next j
'加上這段,多個相同的a(i)值并列第k名,那么List2中對應位置已占用時就向后排'
While List2.List(k - 1) <> ""
k = k + 1
Wend
List2.List(k - 1) = Str(a(i)) '修正一個錯誤'
Next i
End Sub
uj5u.com熱心網友回復:
用ArrayList轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/82867.html
標籤:VB基礎類
