模拟抛硬币过程
首先,试图使用Java模拟一个抛硬币的过程。过程是使用一个随机函数随机的产生正与反,然后进行统计。
Coin.java
成员变量negitive与positve分别统计出现正反的次数,turn表示模拟的轮次。方法tossing()里面包含一个随机数0,1产生的过程,并将结果交给方法getResult()处理用于统计。最后通过方法showResults()可以显示统计结果。
下面做个测试,main()方法中通过抛200次,可以得到类似结果,
2.过程提炼与抽象
上面的代码可以很好的模拟抛硬币的场景,但太过于具体,我试图将其抽象化。
首先对于一个随机过程的演示,我想到它应该做3件事情,1提供随机产生器;2进行过程演示;3输出结果。我把它定义到一个接口中。
Randomer.java <<interface>>
而设想针对抛硬币的过程,我使用一个抽象类先部分给出设定随机数产生器与轮次的概念。当然对于过程演示(runToss)与输出结果(showResults)是具体应用的东西,先不作考虑,继续抽象它。
Tosser.java <<abstract class>>
好了,现在试图提供一个随机数产生器,这个产生器设定为基于均等机率产生整型数。产生数的范围range是可以通过具体应用设定的。
Seeder.java
3.抛硬币与掷骰子
现在我用上面的结构,再次设计一个抛硬币的过程。它会继承抽象类Tosser。
Coin.java
在构造子中,我设定了随机数构造器的range=2。并将runToss()与showResults()的具体逻辑补充完。在main()方法中,再次进行测试,轮次还是200。可以得到类似的结果为,
有了上面的结构,我不但可以抛硬币,我还可以掷骰子。
Dice.java
同样设定轮次为200,可以得到类似的测试结果,
4. 既抛硬币又掷骰子
现在既要抛硬币又要掷骰子,我在抽象基类Tosser中增加一个Simple Factory。
Tosser.java <<abstract class>>
下面写一个测试类。
TosserTest.java
既抛硬币又掷骰子,轮次都为100,可以得到类似测试结果为,
本文出自 “子 孑” 博客,请务必保留此出处http://zhangjunhd.blog.51cto.com/113473/58934 |
|