订购多维数组

时间:2012-10-18 18:20:59

标签: vb.net

我正在尝试对多维数组进行排序,但我不确定这是否是正确的方法。到目前为止,我在多维数组中获取了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

2 个答案:

答案 0 :(得分:0)

迭代数组的惯用方法是使用For-statement

完成的
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

数组索引始终从0转到arraysize-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中的关键字。)


<强>更新

我假设您想要为每位玩家排序。实现这一目标的最简单方法是使用锯齿状数组。

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)访问论坛。

答案 1 :(得分:0)

如果你勾勒出来,我会打赌你真的会帮助你。单维数组和多维数组之间没有真正的区别,它纯粹是你自己的思维过程。考虑一个5x3阵列,由5个骰子的网格组成。我们可以用两种方式组织它:

作为二维: 数组的开头 - &gt;卷1 - &gt; 1 2 3 4 5 第2卷 - &gt; 2 4 2 1 5 卷3 - &gt; 2 5 4 3 2

或作为一维: 数组的开头 - &gt; 1 2 3 4 5 2 4 2 1 5 2 5 4 3 2

无论哪种方式,你都必须随意确定你是如何分割你的内存块的。在二维情况下,您预先标记第一个数组索引,基本上说“每个第二维将保持5个整数”。在记忆中你会弄清楚你喜欢的地方: memory_address =偏移量到达数组的内存空间+ [1st_Dim] * sizeof(5个整数)+ [2nd_Dim] * sizeof(整数)

一维案例改为: memory_address =偏移量到达数组的内存空间+ [1st_Dim] * sizeof(整数)

只要您在知道自己处于正确的索引时,两个地址就是相同的。

在纸上绘制并运行索引,它将帮助您了解您正在迭代的内容。