VB计算数组中相同数字的个数

VB一维数组a(14)中,有一串不规则的数字,例如3 5 8 1 3 2 4 5 6 6 5 4 1 3 2 ,如何能计算出有多少个相同的数字?
print 有2个3
有3个5
有1个8
有2个1
以此类推…
求高手解答,小弟不胜感激

另外建立一个二维数组d(1 To 14,1 To 2) As Integer
用来存放各数值以及出现的次数,一开始都为0,或者其它一个特殊的数据-9999
然后,从a数组每读一个数,就去扫描数组d,找一找是否存在,若不存在就添加,若存在就加1

窗体上添加一个按钮:
代码如下:

Option Explicit

Private Sub Command1_Click()
Dim a()
Dim d() As Integer
Dim i As Integer
Dim j As Integer
Dim n As Integer
a = Array(3, 5, 8, 1, 3, 2, 4, 5, 6, 6, 5, 4, 1, 3, 2)
n = UBound(a)
ReDim d(0 To n, 1 To 2) As Integer
For i = 0 To n
For j = 1 To 2
d(i, j) = -9999
Next j
Next i
For i = 0 To n
For j = 0 To n
If d(j, 1) <> -9999 Then
If a(i) = d(j, 1) Then
d(j, 2) = d(j, 2) + 1
Exit For
End If
Else
d(j, 1) = a(i)
d(j, 2) = 1
Exit For
End If
Next j
Next i

For i = 0 To n
If d(i, 1) <> -9999 Then
Print "有:"; d(i, 2); "个"; d(i, 1)
End If
Next i
End Sub追问

For i = 0 To n
For j = 0 To n
If d(j, 1) -9999 Then
If a(i) = d(j, 1) Then
d(j, 2) = d(j, 2) + 1
Exit For
End If
Else
d(j, 1) = a(i)
d(j, 2) = 1
Exit For
End If
Next j
Next i
这一段不太懂,能加个注释吗?

追答

说明:d是二维数组,第1维度存放找到的数字,第2维度存放找到了该数字几次。
以“3 5 8 1 3 2 4 5 6 6 5 4 1 3 2”为例;
d(1, 1)里存放 3,d(1, 2)里存放 3,表示 3个3
d(2,1))里存放 5,d(2, 2)里存放 3,表示 3个5
d(3,1))里存放 8,d(3, 2)里存放 1,表示 1个8
d(4,1))里存放 1,d(4, 2)里存放 2,表示 2个1
d(5,1))里存放 2,d(5, 2)里存放 2,表示 2个2
d(6,1))里存放 4,d(6, 2)里存放 2,表示 2个4
d(7,1))里存放 6,d(7, 2)里存放 2,表示 2个6
代码是从左到右扫描字符串(其实已经存入数组a()),
For i = 0 To n
For j = 0 To n
If d(j, 1) -9999 Then '因为d()数组的第一维初始化都存放-9999表示还没有开始扫描
如果不等于-9999,那么就是已经存放了找到的某个数字
If a(i) = d(j, 1) Then '这里,如果现在的a(i) 与 已经找到的某个数字相同
d(j, 2) = d(j, 2) + 1 '那么,其第2维要加1,表示又一次找到的相同的数字
Exit For '既然找到了,内循环可以结束了
End If
Else '这是对应d()数组的第一维等于初始化的值 -9999
d(j, 1) = a(i) '要这样理解,会运行到这里是基于:这个a(i)是第一次出现
d(j, 2) = 1 '这就是第一次出现的赋值
Exit For
End If
Next j
Next i

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-17
Dim a(14) As Integer
Dim b(10) As Integer

Private Sub Command1_Click()
For i = 1 To 14
a(i) = Int(100 * Rnd()) ‘这里产生100以内的随机数,如要个位数,改成10
Print a(i);
Next i
Print
For i = 1 To 14
x = a(i)
Do
j = a(i) Mod 10
b(j) = b(j) + 1
x = x \ 10
Loop Until x = 0
Next i
For i = 0 To 9
If b(i) > 0 Then Print "有"; b(i); "个"; i
Next i
End Sub追问

Do
j = a(i) Mod 10
b(j) = b(j) + 1
x = x \ 10
Loop Until x = 0
有点看不懂这些是怎么用的,请继续指教

追答

Do
j = a(i) Mod 10 '取个位数字
b(j) = b(j) + 1 ‘取到的数字个数加1
x = x \ 10 ’去掉已取过的数字
Loop Until x = 0 ‘直到所有的数字都处理完
你要还不清楚的话,随便弄个数字,设A(i)=23或是1234都行的。

追问

好像两位数以上就不行了,加入我的那串数字是1 2 3 3 10 10 200 200,能做到
print 1个1
1个2
2个3
2个10
2个200
吗?

追答

For i = 0 To 9
If b(i) > 0 Then Print "有"; b(i); "个"; i
Next i
End Sub
怎么会有10和200呢?

这个程序没问题的,只要不大于32767就行。
输入1个22222,它会告诉你有5个2。

本回答被网友采纳
第2个回答  2013-05-19
这个问题。。
不应该像楼上那么做。。
应该用到Len()函数和Mid()函数
Len()取字符串长度
Mid()取值 然后再用If语句判断
代码就不写出来了 百度一下Len()和Mid()怎么用就能学会