错在哪?
Dim a() As Integer = {1, 3, 5, 9, 11, 13}
Dim b() As Integer = {1, 3, 5, 9, 11, 18}
Dim c() As Integer = {2, 3, 5, 9, 11, 18}
Dim d() As Integer = {2, 3, 6, 9, 11, 18}
Dim i As Integer
Dim j As Integer
Dim Count As Integer
Dim g As New ArrayList()
'将数组加入到数组集合中
g.Add(a)
g.Add(b)
g.Add(c)
g.Add(d)
'循环判断
Jump: For i = 0 To g.Count - 2
Dim s() As Integer = g.Item(i)
For j = i + 1 To g.Count - 1
Dim t() As Integer = g.Item(j)
Count = 0
Dim ss As Integer
For Each ss In s
Dim tt As Integer
For Each tt In t
If ss = tt Then
Count = Count + 1
End If
Next
Next
'如果删除标志大于5,则删除相应位置中的一个结点
If Count >= 5 Then
g.RemoveAt(j)
MessageBox.Show(g.Count.ToString)
Exit For
GoTo Jump
End If
Next
Next
Dim c1() As Integer
Dim ss1 As String
Dim i1 As Integer
For i1 = 0 To g.Count - 1
c1 = g(i1)
Dim j1 As Integer
For j1 = 0 To c1.Length - 1
ss1 = ss1 + c1(j1).ToString + ","
Next
ListBox1.Items.Add(ss1)
ss1 = ""
Next
我想要求的是如果两个数组相互之间有5个以上值相同,便删除其中的一个数组,然后继续检查下去,直到集合里的数组相互没有5个以上值相同为止。
也就是我最终的答案是:集合列表内只剩下a()和c(),我的错在哪里呢?
问题点数:100、回复次数:5Top
1 楼yuwen16(rr)回复于 2004-05-02 12:13:51 得分 50
问题在g.RemoveAt(j)这句上
如果你此时删除的话g.count已经改变?所以你此时最好别删除,只是标记出来。然后在删除!!Top
2 楼CMIC(大象)回复于 2004-05-02 12:51:14 得分 50
同意楼上的Top
3 楼xzc585800(xzc)回复于 2004-05-02 14:54:02 得分 0
第一个循环查出的是a()和b(),我如果此时不删除b(),那么循环下去,有和它一样有重复5个以上的数值的也一样会删除出去。如:c()也有和b()有5个数值重复,这时不删除b(),继续循环下去,c()也会被作上标识而删除出去,这样就只会剩下一个数组了,而不是我所说的两个a()和c(),了。
Top
4 楼lijun84(李俊俊)回复于 2004-05-03 02:02:12 得分 0
UP!~UP!~UP!~Top
5 楼xzc585800(xzc)回复于 2004-05-03 13:52:14 得分 0
我已经解决了,哈哈。在此谢谢各位帮助我的朋友。Top




