我正在尝试对多维数组进行排序,但我不确定这是否是正确的方法。到目前为止,我在多维数组中获取了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 :(得分: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(整数)
只要您在知道自己处于正确的索引时,两个地址就是相同的。
在纸上绘制并运行索引,它将帮助您了解您正在迭代的内容。