如何算出二維陣列不同元素的個數,并放在一維陣列里。謝謝!如下,是我的思路。但是元素個數很容易被后面元素的個數覆寫掉。
for i =0 to X
for j =0 to Y
for ni =i to X
for nj =j to Y
if A(i,j)=A(ni,nj) then 加入一維陣列
next ni
next nj
next i
next j
uj5u.com熱心網友回復:
利用一個 ListBox,可以設定成不可見。
Private Declare Function SendMessagebyString Lib "user32" Alias "SendMessageA" (ByVal hWND As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const LB_FINDSTRINGEXACT = &H1A2 '在 ListBox 中精確查找
List1.Clear
For i = 0 To X
For j = 0 To Y
n = SendMessagebyString(List1.hWnd, LB_FINDSTRINGEXACT, -1, A(i,j))
If n = -1 then
List1.AddItem A(i, j)
List1.ItemData(List1.NewIndex) = 1
Else
List1.ItemData(n) = List1.ItemData(n) + 1
End If
Next j
Next i
Redim number(List1.ListCount - 1)
For i = 0 To List1.ListCount - 1
number(i) = List1.ItemData(i)
Debug.Print List1.List(i), List1.ItemData(i)
Next i
不知你弄到一維陣列中的意圖。那如何知道哪一個元素有多少呢?
uj5u.com熱心網友回復:
元素個數很容易被后面元素的個數覆寫掉暈,你應該用陣列而不是一個變數來保存計數
uj5u.com熱心網友回復:
你這樣查下去,估計最后元素個數都是1,因為你第一次查到這個元素的時候,總數是對的,當你第二次又查這個元素的時候,總數就少了一個,但卻把原來那個個數覆寫了。你需要用一個臨時陣列,把原始陣列傳遞給臨時陣列,去查臨時陣列。查一個元素的時候,將查到的與它相等的元素都去掉,比如換成0或者換成負數,總之,換成你陣列里不可能有的東西就行,這樣,你再查的時候,加一個陳述句,if timparry(x)=0(或者你換成的東西)then exit for,就是當遇到你要過的項的時候,就不要再查了,這樣,就應該不會錯了,具體代碼你自己寫吧。uj5u.com熱心網友回復:
我不是程式員,不會寫程式。但是直覺認為你的第二段里的思維邏輯有問題。
“for ni =i to X
for nj =j to Y”
這里的X,和,Y;不應該跟第一段
for ni =i to X
for nj =j to Y
里面的X和Y等值,并使用同一坐標范圍。如果是你寫的這段,
那么,實際上,ni=i to ??, 里面的i值已經到max值了;“ nj =j to ??”里面的j值也已經到max值了。
那你后面兩段的:
next ni
next nj
next i
next j
實際上就是會被覆寫,而且沒有辦法回圈。
假設 i = 0 to 100;j =0 to 100; 那么你的ni 和 nj 實際上都是等于 0 to 100的。
所以你的第二輪回圈實際上就是等于第一輪回圈。你不管怎么設定A(i,j)=A(ni,nj) ,最后結果都是 只有 next i 和 next j。
不會編程,瞎猜的。自己看你的代碼,感覺有問題。
uj5u.com熱心網友回復:
不對。我的這段也有問題。連著幾天換系統,找升級,有點累了。重新想了一下,你的這個外回圈和內回圈,還有不對的地方。
如果外回圈,
for X =0 to X'
for Y =0 to Y'
next X
next Y
疊加一個范圍,結束。
那么,你等于外圍預先定義了這個范圍,內回圈結束后,自動回傳外回圈。但你沒有劃分出來,等于一直在不停的做這個回圈。相當于英語叫做BOX
for nX =X to X'
for nY =Y to Y'
next nX
next nY
實際上沒有起任何作用。等于不存在。如果要內回圈成立的話,你得加另一層英語叫做box的東西,兩個得分開。
相當于計算時,有不同的范圍界限。第一個外BOX里X,Y的范圍是定義坐標雙向值,第二個內BOX里,nX和nY是實際的坐標計算的數字移動值。當移動值得范圍超過被定義的坐標值劃分范圍時,計算機沒有辦法計算了。要么消失,要么回傳坐標原點,即 X=0,Y=0。那么,nX和nY, 這個時候也等于0. 因為計算機系統的計算是建立在維度假設上的,也就是物理假設上。如果超過假設的維度范圍,那么計算全部失效。
uj5u.com熱心網友回復:
感覺這里的二維陣列純粹是添亂的. 最終輸出也只是一維陣列而已.先要弄明白樓主的意圖: 好像是把原資料中的重復項放進一個一維陣列中去??? 是么
如果是這樣的話:
1: 先申請一個(X+1)*(Y+1)大小的陣列, 假裝就是A1(Z), 其中 Z = (X+1)*(Y+1)-1
2: COPYMEMORY , 把二維陣列A拷貝進一維陣列A1
3:一維陣列找重復也好不重復也好, 代碼就簡單多啦.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/110922.html
標籤:VB基礎類
