VBA编程练习:生成25个随机数并进行自动排序(基于Access)
算法练习要实现的目标
1.做1个窗体、包含两个文本框
2.在Access文本框里加入25个随机数字
3.要求数字不重复
4.按照从小到大排序
主要应用技术:
1.ForNext防止重复
2.冒泡算法排序
练习步骤
步骤1:制作输出端(窗体)
做两个文本框、两个按钮控件。一个文本框用于展示不重复的排列情况,另一个文本框用于展示有重复的情况。
步骤2:生成25个随机数(1-30),并要求不重复
代码如下
For i = 1 To 25
a(i) = Int(30 * Rnd + 1)
For j = 1 To i - 1 '这段是防止重复的代码
If a(i) = a(j) Then '如果重复了再次选择
i = i - 1
End If
Next j
Next i
步骤2技术要点是建立一个数组a,利用一个ForNext进行数组赋值。
难点是对25个随机数进行去重操作。方法是引入一个新变量j,每生成一个数字就跟上一个数字进行比较,如果相同就重新进行选择。利用的也是ForNext操作。
去重操作代码
For j = 1 To i - 1 '这段是防止重复的代码
If a(i) = a(j) Then '如果重复了再次选择
i = i - 1
End If
Next j
步骤3:用冒泡算法进行排序
冒泡算法的核心思想是引入一个中间变量t,不停地比较相邻的数字。冒泡算法核心思想是把大数往下压、小数往前挤出。如同气泡往前走一样。我会另外写一篇文章介绍冒泡算法,本文只做简单介绍。
代码如下:
For i = 1 To 25 - 1
For j = i + 1 To 25
If a(i) > a(j) Then
t = a(i) 't作为中间变量,冒泡算法常见
a(i) = a(j)
a(j) = t
End If
Next j
Next i
25个数字生成和数字排序设定在一个sub下,通过点击一次按钮即可操作
步骤4:对输入段进行分行操作
为了便于演示,25个数字要进行分行。每数到5进行一次回车。
tempStr是中间变量,用途是将数字分隔开,并逢5的倍数进行回车操作。运用If函数进行区分。
Chr(13)和Chr(10)是计算机的回车符号。
For i = 1 To 25
Text1 = Text1 + tempStr + CStr(a(i)) 'CStr转换成字符串
If i = 5 Or i = 10 Or i = 15 Or i = 20 Or i = 25 Then
tempStr = Chr(13) + Chr(10) + " " '换行
Else
tempStr = " "
End If
Next i
完整代码
Option Compare Database
Dim i As Integer
Dim j As Integer
Dim tempStr As String '中间变量,用于数列分行
Dim a(1 To 25) As Double '数组一共25个数字
Dim t As Double '中间变量,排序用
Private Sub Command1_Click()
Text1 = ""
tempStr = " "
'下面这段是生成不重复的25个数字,从1-30的数字里选择
For i = 1 To 25
a(i) = Int(30 * Rnd + 1)
For j = 1 To i - 1 '这段是防止重复的代码
If a(i) = a(j) Then '如果重复了再次选择
i = i - 1
End If
Next j
Next i
'这段是排序,运用冒泡算法
For i = 1 To 25 - 1
For j = i + 1 To 25
If a(i) > a(j) Then
t = a(i) 't作为中间变量,冒泡算法常见
a(i) = a(j)
a(j) = t
End If
Next j
Next i
'这段是在文本框里生成25个数字
For i = 1 To 25
Text1 = Text1 + tempStr + CStr(a(i)) 'CStr转换成字符串
If i = 5 Or i = 10 Or i = 15 Or i = 20 Or i = 25 Then
tempStr = Chr(13) + Chr(10) + " " '换行
Else
tempStr = " "
End If
Next i
End Sub
Private Sub Command2_Click()
Text2 = ""
tempStr = " "
'下面这段是生成的25个数字(有可能重复),从1-30的数字里选择
For i = 1 To 25
a(i) = Int(30 * Rnd + 1)
Next i
'这段是排序,运用冒泡算法
For i = 1 To 25 - 1
For j = i + 1 To 25
If a(i) > a(j) Then
t = a(i)
a(i) = a(j)
a(j) = t
End If
Next j
Next i
'这段是在文本框里生成25个数字
For i = 1 To 25
Text2 = Text2 + tempStr + CStr(a(i))
If i = 5 Or i = 10 Or i = 15 Or i = 20 Or i = 25 Then
tempStr = Chr(13) + Chr(10) + " "
Else
tempStr = " "
End If
Next i
End Sub
.
请先 后发表评论~