我正在做一笔交易或者不做交易'在Visual Basic 2008中为项目键入游戏。
我在将5个值随机分配到5个框时遇到问题。
例如,在一个游戏中,框可以包含以下值:
Box 1 = 1000
Box 2 = 35000
Box 3 = 25000
Box 4 = 75000
Box 5 = 5000
在另一个游戏中,他们可以保留这些值
Box 1 = 75000
Box 2 = 25000
Box 3 = 1000
Box 4 = 5000
Box 5 = 35000
主要目的是将这些值随机分配到每个框中,一旦分配了值,就不能同时将其分配给另一个框。
以下是我目前的代码:
Dim values As New List(Of Integer)
Dim box(4) As Integer
Dim randNum(4) As Integer
'adding values to the Value list
values.Add(1000)
values.Add(5000)
values.Add(25000)
values.Add(35000)
values.Add(75000)
Dim i As Integer
For i = 0 To 4
Dim RandomClass As New Random()
Dim RandomNumber As Integer
RandomNumber = RandomClass.Next(0, 4)
'assigning a box a random value form the list
box(i) = values(RandomNumber)
'removing that value from the list
values.RemoveAt(i)
Next
Console.WriteLine("Box 1 = " & box(0))
Console.WriteLine("Box 2 = " & box(1))
Console.WriteLine("Box 3 = " & box(2))
Console.WriteLine("Box 4 = " & box(3))
Console.WriteLine("Box 5 = " & box(4))
Console.Read()
当我尝试运行应用程序时,VB不断返回此错误消息:
指数超出范围。必须是非负数且小于集合的大小。参数名称:index
提前感谢您的任何答案。
答案 0 :(得分:1)
删除项目时,列表的长度会变小。所以在第二个循环中,索引4不再存在。在第三个循环中,3不再存在,依此类推。试试这个:
Dim RandomClass As New Random()
Dim RandomNumber As Integer
For i = 0 To 4
RandomNumber = RandomClass.Next(0, values.count - 1)
'assigning a box a random value form the list
box(i) = values(RandomNumber)
'removing that value from the list
values.RemoveAt(i)
Next
答案 1 :(得分:1)
史蒂夫的回答可以防止错误发生,但我认为它仍然没有做到你想要的。 values.RemoveAt(i)
将始终在第一次,第二次,下次等时从列表中删除第一项...它不会删除您刚刚放入框中的值。为此,您应该使用values.RemoveAt(RandomNumber)
代替。
For i = 0 To 4
RandomNumber = RandomClass.Next(0, values.count - 1)
'assigning a box a random value form the list
box(i) = values(RandomNumber)
'removing that value from the list
values.RemoveAt(RandomNumber)
Next