/ / Подреждане на многомерни масиви - vb.net

Подреждане на многомерни масиви - 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

Отговори:

0 за отговор № 1

Идиоматичният начин на повтаряне на масиви се прави с помощта на 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

Индексът на масива винаги се движи от 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.)


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 за отговор № 2

Наистина ще ти помогна да заложа, ако ти го скицирашнавън. Няма реална разлика между масив с едно измерение и мултимерен масив, това е чисто вашият мисловен процес. Помислете за 5x3 масив, състоящ се от мрежа от ролки от 5 зарчета.

Като двуизмерно: начало на масив -> рол 1 -> 1 2 3 4 5 ролка 2 -> 2 4 2 1 5 ролка 3 -> 2 5 4 3 2

Или като 1 измерение: начало на масив -> 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 (цяло число)

Двата адреса ще бъдат идентични, стига да "внимавате да знаете, че сте на правилния индекс".

Начертайте го на хартия и преминете през индексирането, то ще ви помогне да разберете какво прелиствате.