嗨,我想做一个随机数生成器,只创建随机表达式
这是我的一个数学游戏项目。我的问题是,现在我不理解随机生成器。
就像我只想让它创建一个随机的2位数整数,然后是一个运算,然后是另一个随机2位数整数。一个随机表达式生成器将生成减法和加法问题,而另一个将生成乘法和除法问题
像这个
23-7848-5524+16
也许Random
类会很有用:
Sub Main
'Create an instance of the Random class
Dim rnd As New Random()
'Get a random number from 10 to 99 (2 digits)
Dim randomNumber As Integer = rnd.Next(10, 100)
Console.WriteLine(randomNumber)
End Sub
您可能会发现,了解当前生成器的工作方式比编写自己的生成器更容易。
有一个表达式会给你一个介于两个包含边界之间的随机整数:
value = CInt(Math.Floor((upper - lower + 1) * Rnd())) + lower
你可以用它来获得你的两位数:
value = CInt(Math.Floor(90 * Rnd())) + 10
要从四个{+-*/}
的集合中获得基本运算,可以使用相同的规则给您一个从零到三的随机值:
op = CInt(Math.Floor(4 * Rnd()))
如果你想要一个文本表示,你只需要一个可以从中获取运算符的字符串(作为字符或字符串),比如:
Dim ops As String = "+-*/"
Dim chrop as Char = ops(CInt(Math.Floor(4 * Rnd())))
Dim strop as String = ops.SubString(CInt(Math.Floor(4 * Rnd())),1)
例如,这里有一个生成此类表达式的完整程序,不过您需要弄清楚如何将其与自己的代码集成(首先将其重构为几个函数会很好)。
我还没有对数字生成中是否存在边缘情况进行详尽的分析,因此您需要一个测试套件来确定。
作为一名开发人员,你应该做的所有事情:-)
Module Module1
Sub Main()
Dim ops As String = "+-*/"
Randomize()
Dim value1 As Integer = CInt(Math.Floor(90 * Rnd())) + 10
Dim value2 As Integer = CInt(Math.Floor(90 * Rnd())) + 10
Dim strop As String = ops.Substring(CInt(Math.Floor(4 * Rnd())), 1)
Console.WriteLine(value1 & " " & strop & " " & value2)
End Sub
End Module