订购输出的随机数

时间:2012-10-17 17:16:27

标签: vb.net

我正在制作一个输出随机数的程序,然后组织它们。

我正在组织这些数字,所以稍后我可以添加代码告诉用户他或她收到了多少匹配号码。

程序编译很好,但是当我运行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

1 个答案:

答案 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