对于随机数的实验,根据课程上的教程,有如下的公式:

对应的变量参数的说明:

其中对应的Mouduls变量对应的就是公式中a的值,在公式中的含义就是相当于要循环多少个数才重复的一个值。

Multiplier对应的就是公式中m的值,表示的是范围值,例如图上的16807表示的就是取种子返回的随机数的范围为0-16806。

公式中的c表示的是公式每次返回的随机数要增长的一个值,如果是常数的话,每次增长的值将会是一个固定的值,就变成了容易重复的状态,所以,为了不使其是一个重复的状态,我打算在每次取完随机数之后将生成的随机数Xn赋值给c;

Xn表示的随机数函数中取种子的一个步骤,其中第一次取值,其实就是取种子的过程,也就是对X0取值的过程,当取到第一个种子后,此后的随机数一般都不用取种子了。

根据上述的简单分析,那么以下就是实验实现随机数的一个算法,代码如下:

package suijishu;

public class Suijishu {

    private long xn=0;
private long c=0;
public int random_num(int a,int b)
{
return (int) (random()%(b-a+1)+a);
}
public long random() //生成第n+1个的随机数过程
{
int Multiplier=16807;
long Modulus=((1<<31)-1);
xn=(Modulus*xn+c)%Multiplier;
c=xn;
return xn;
}
public void setseed(long seed) //取种子
{
xn=seed;
} //主函数
public static void main(String[] args) {
// TODO 自动生成的方法存根
Suijishu sjs=new Suijishu();
int num[]=new int[6]; //模拟色子的六个面整型变量
int account=0;
sjs.setseed(System.currentTimeMillis());
for(int i=0;i<6000;i++) //模拟循环6000次摇色子的过程
{
account=sjs.random_num(1,6); //摇色子
++num[account-1]; //对应的色子面的变量加一
}
for(int j=0;j<6;j++)
{
System.out.println((j+1)+":"+num[j]);//看最终色子对应面被咬的次数
}
} }

类中setseed是一个取种子的函数,我在代码中取的种子是系统的当前时间。(距离1970年1月1日的毫秒数),因为时间是一直在变得,因此取时间作为种子是一个不错的选择。

random()是一个取种子之后的返回随机数的函数

random_num(int a,int b)是一个封装的函数,返回a-b之间的随机数的值;

下面是实验的截图:

随机数的分布情况还是挺平均的。

Java实验--课上提到的随机数生成原理简单实现(不利用库生成随机数的简单算法)的更多相关文章

  1. Java实验课:命令行参数是什么?

    命令行参数:在命令行中给定的参数就是命令行参数.(即从输入位置角度理解). 命令行的参数 1. 什么是命令行的参数? 如: java Test1 365 156 "China" ( ...

  2. 第十八周java实验作业

    实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...

  3. 第十七周Java实验作业

    实验十七  线程同步控制 实验时间 2018-12-10 1.实验目的与要求 (1) 掌握线程同步的概念及实现技术: 多线程并发运行不确定性问题解决方案:引入线程同步机制,使得另一线程使用该方法,就只 ...

  4. #012python实验课

    通过三到四周的学习Python选修课程已经学到了网络爬虫这一环节. 基础语法混乱 这是,在进行周四实验课程的时候,一直遇到的一个问题.写着写着,就往C语言的语法方向跑了,可以说之前我仅仅是对,pyth ...

  5. 第二次Java实验报告

    Java实验报告 班级 计科二班 学号 20188437 姓名 何磊 完成时间 2019/9/12 评分等级 实验二 Java简单类与对象 实验目的 掌握类的定义,熟悉属性.构造函数.方法的作用,掌握 ...

  6. JDBC让java程序连上数据库(mysql数据库)

    一.小论异常: 其实JDK已经提供了一组API让java程序连上数据库,并执行SQL语句,其实说起来也蛮简单的,但是绝对是一个细致活,因为稍不留神,异常就铺天盖地的来了,下面说说这些异常吧(声明一下: ...

  7. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  8. 高并发分布式系统中生成全局唯一(订单号)Id js返回上一页并刷新、返回上一页、自动刷新页面 父页面操作嵌套iframe子页面的HTML标签元素 .net判断System.Data.DataRow中是否包含某列 .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    高并发分布式系统中生成全局唯一(订单号)Id   1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(D ...

  9. Java实验--关于课上找“水王”问题分析

    问题的表述就是说有那么一个人,他在一个论坛上发帖,然后每贴必回,自己也发帖.那么这个人在发帖的数目上就超过了整个论坛的帖子数目的一半以上. 我对这个问题一开始的思路是,用SQL语句获取整个列表中的数据 ...

随机推荐

  1. 云梯互联:所有主机已全面支持免费SSL!附小白配置教程。

    HTTPS和HTTP的区别:1.HTTPS是加密传输协议,HTTP是名文传输协议;2.HTTPS需要用到SSL证书,而HTTP不用;3.HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO4. ...

  2. droplang - 删除一种 PostgreSQL 过程语言

    SYNOPSIS droplang [ connection-option...] langname [ dbname] droplang [ connection-option...] --list ...

  3. iview table 勾选当前行代码 data key _checked: true

    给 data 项设置特殊 key _checked: true 可以默认选中当前项

  4. 基于VueJS的render渲染函数结合自定义组件打造一款非常强大的IView 的Table

    基于VueJS的render渲染函数结合自定义组件打造一款非常强大的IView 的Table https://segmentfault.com/a/1190000015970367

  5. c++:delete或free报错,语法正常。

    #include <stdio.h> #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { ]; memcpy( ...

  6. unnamed not found for the web module

    intellij idea tomcat 启动报错not found for the web module 使用intellij idea 创建tomcat项目的时候会出现该错误: 启动tomcat的 ...

  7. MyBatis基本运行环境

    MyBatis基本运行环境 1. 创建项目 2.拷贝jar加入到项目中build path jar包 3.创建数据库的表及数据添加 USE [mybatis] CREATE TABLE [dbo].[ ...

  8. Hibernate中tx.commit()

    hibernate.cfg,xml文件中的自动提交事务是false.主键生成策略是native. 在表的映射继承是手动提交事务(即:tx.commit())无法发出sql语句,把数据插入到数据库的表中 ...

  9. devops issue

    1.Nginx(refercence:https://zhuanlan.zhihu.com/p/24382606) summary: DJANGO_PROJECT = /home/django/dja ...

  10. C指针类型转换问题

    先看下面的代码: #include<stdio.h> int main () { int a; char *x; x = (char *) &a; a = 512; x[0] = ...