我正在制作一个输出随机数的程序,然后组织它们。
我正在组织这些数字,所以稍后我可以添加代码告诉用户他或她收到了多少匹配号码。
程序编译很好,但是当我运行exe时,在输出第一行随机数之后它会崩溃。我收到的错误是:
索引超出了数组的边界。
任何帮助都将不胜感激。
Option Explicit On
Option Strict On
Imports System
Module Yahtzed
Sub Main()
Randomize()
Dim Index, Values, NumberOfPlayers,Temp as Integer
Dim order(index) as integer
Dim Last As Integer = 0 'to Order.Length-2
Console.Write("How many people will be playing Yahtzed?: ")
NumberOfPlayers = convert.toint32(Console.Readline)
Do while NumberOfPlayers > 0
Index = 0
Do until index = 5
Values = CInt(Int((6 * Rnd()) + 1))
Console.Write(" "&values)
Index += 1
Loop
Do Until Index = 0
If Order(Index + 1) < Order(index)
Temp = Order(Index + 1)
Order(Index + 1) = order(index)
Order(index) = Temp
Console.WriteLine(Order(Index))
End if
index -= 1
loop
Console.Writeline
NumberOfPlayers -= 1
Console.Writeline()
Loop
End Sub
End Module
答案 0 :(得分:2)
代码现在并没有真正意义。您创建一些随机数,然后将它们丢弃,然后对从未分配任何内容的数组进行排序。此外,该数组只有一个项目,因此无法保存随机值。
我认为您要为五个项目声明数组,而不是一个(在创建数组时,index
为零):
Dim order(4) As Integer
然后将随机数放在数组中,而不是将它们放在一个变量中,每个随机数将替换前一个变量:
Index = 0
Do until index = 5
order(index) = CInt(Int((6 * Rnd()) + 1))
Console.Write(" " & order(index))
Loop
对数组进行排序时,开始查看索引6(因为变量index
是5),它位于数组之外。您可能希望从数组中的最后一项开始(即在索引3处)。然后循环直到index
为-1,否则你将不会比较数组中的两个第一项。
此外,你必须继续排序,直到没有更多的交换,只是通过数组一旦不进行排序:
Dim swapped as Boolean = True
Do While swapped
index = 3
swapped = False
Do Until index = -1
If order(index + 1) < order(index)
temp = order(index + 1)
order(index + 1) = order(index)
order(index) = temp
swapped = True
End if
index -= 1
Loop
Loop
此排序算法称为Bubble Sort。
如果您想使用它,还可以在框架中内置排序:
Array.Sort(order)
如果你在排序时写出这些值,你会多次得到它们,所以你在排序后就这样做了:
index = 0
Do until index = 5
Console.Write(" " & order(index))
Loop