2012-10-18 209 views
0

我想排序一個多維數組,但我不確定這是否是正確的方法去解決它。到目前爲止,我在多維數組中獲取5個數字,然後將它們移動到單維數組中,並使用數組排序。知道更好的方法嗎?或者有關於如何改進我的想法?此外,代碼目前不在排序區域工作,它給了我一個索引超出陣列錯誤。排序多維數組

任何幫助將不勝感激。在此先感謝

Module q 
    Sub Main() 
     Randomize() 
     Dim Player,RandomNumber,NumberOfPlayers,Index As Integer 
     Dim Roll as Integer = 0 
     Console.Write("How many people will be playing Yahtzed?: ") 
     Player = convert.toint32(Console.Readline) 
     NumberOfPlayers = Player 
     Dim Game(Player,5) As Integer 
     Do until Player = 0 
      Console.Write("User") 
      Roll = 0 
      Do until Roll = 5 
       RandomNumber = CINT(Int((6 * Rnd()) + 1)) 
       Game(Player,Roll) = RandomNumber 
       Roll += 1 
       Console.Write(" "&RandomNumber) 
      Loop 
      Player -= 1 
      Console.Writeline() 
     Loop 
     Player = NumberOfPlayers 
     Do until Player = 0 
      Dim Ordering(5) as Integer 
      Roll = 0 
      Do until Roll = 5 
       Ordering(Index) = Game(Player,Roll) 
       Roll += 1 
       Index += 1 
       Array.Sort(Ordering) 
      Loop 
     Loop 
    End Sub 
End Module 
+0

我懷疑你想要一個數組而不是一個2維數組的數組。或者,更好的是,一個數組列表。是不是每個球員都有一個骰子擲骰的列表? –

回答

0

迭代陣列的慣用方式是使用for語句

Const NPlayers As Integer = 5, NRolls As Integer = 5 

Dim game = New Integer(NPlayers - 1, NRolls - 1) {} 
Dim randomizer As New Random() 
Dim randomNumber As Integer 

For p As Integer = NPlayers - 1 To 0 Step -1 
    For r As Integer = 0 To NRolls - 1 
     randomNumber = randomizer.[Next](10) 
     game(p, r) = randomNumber 
    Next 
Next 

的數組索引總是從0arraysize-1完成。

您訂購數組的大小將是NPlayers * NRolls

Dim Ordering(NPlayers * NRolls - 1) As Integer 

你們是太短了。因此你會得到一個例外。


整數隨機數可以使用Random

Dim randomizer As New Random() 
Dim randomNumber As Integer 

... 

randomNumber = randomizer.[Next](10) 

這0到10之間產生隨機數創建隨機數發生器只有一次,然後通過調用Next方法獲得一個隨機數來創建。

(你必須把Next方法括號,因爲Next是VB中的一個關鍵詞。)


UPDATE

我假設你想每個玩家輥進行排序。最簡單的方法是使用鋸齒形數組。

Const NPlayers As Integer = 5, NRolls As Integer = 5 

Dim game = New Integer(NPlayers - 1)() {} 
For p As Integer = NPlayers - 1 To 0 Step -1 
    game(p) = New Integer(NRolls - 1) {} 
    For r As Integer = 0 To NRolls - 1 
     game(p)(r) = randomizer.[Next]() 
    Next 
    Array.Sort(game(p)) 
Next 

但你將有game(p)(r)而不是game(p,r)訪問卷。

+0

一旦輸出這些隨機數字,我將如何進行排序? – user1683391

+0

請參閱我的更新。這樣的數組稱爲參差不齊的數組,因爲每一行可以具有不同的長度。例如,您可以編寫'game(0)= New Integer(2){}'和'game(1)= New Integer(17){}'。 –

0

這真的會幫助你,我敢打賭,如果你勾畫出來。單維數組和多維數組之間沒有真正的區別,它純粹是您自己的思維過程。考慮一個由5個骰子卷組成的5×3陣列。我們可以組織它有兩種方式:

作爲2維: 啓動陣列 - >輥1 - > 1 2 3 4 5 輥2 - > 2 4 2 1 5 輥3 - > 2 5 4 3 2

或者作爲一維:數組 開始 - > 1 2 3 4 5 2 4 2 1 5 2 5 4 3 2

你無論哪種方式任意決定你如何將你的大塊的內存塊。在2維的情況下,你要預先標記第一個數組索引,基本上說「每個第二維將保存5個整數。「在內存中,你會弄清楚你是這樣的: memory_address =抵消你的數組內存空間+ [1st_Dim] * sizeof(5整數)+ [2nd_Dim] * sizeof(整數)

而不是三維情況: memory_address =偏移量以獲得陣列的內存空間+ [1st_Dim] * sizeof(整數)

只要您仔細瞭解自己的位置,這兩個地址是相同的right index。

在紙上畫出來並遍歷你的索引,它會幫助你理解你正在迭代的東西。