java random测试

目录

官方解释:

准备工作:

 

1.nextInt()

2.nextDouble() 

3.nextByte()

4. next()

5.nextGaussian() 

6.额外测试:边界测试

 

注意


 

 

注意导包 java.util.Random

官方解释:

准备工作:

先创建一个Random对象;

Random r = new Random();

你可以不创建,或者每个单元格里面都创建,或者直接使用,比如int n  =  r.nextInt(100) 可以写成 int n = new Random().nextInt(100);

 

单元测试

1.nextInt()

解释:上面是获取随机数,范围是int的范围,还没有测试包不包含边界,不过负数是肯定有的。

上面官方翻译的比较垃圾,简单理解为左闭右开

/**
 * nextInt() ;返回下一个伪随机数,从这个随机数发生器的序列中均匀分布 int值。
 * 返回值 int
 */
@Test
public void Test_nextInt()
{
	for(int i = 1 ;i <= 100;i++)
	{
		System.out.print( i + "=" +r.nextInt() + "	");//这里不是几个空格,而是一个table
		if(i % 5 == 0)
			System.out.println();
	}
	//以下是常用的方法
	/**
	 * nextInt(int bound) ;返回伪随机的,均匀分布 int值介于0(含)和指定值(不包括),从该随机数生成器的序列绘制。 
	 * 简单理解为0到bound的左闭右开 即[0,bound)
	 */
	for(int i = 1 ;i <= 100;i++)
	{
		System.out.print( i + "=" +r.nextInt(100) + "	");//这里不是几个空格,而是一个table
		if(i % 5 == 0)
			System.out.println();
	}
}

 注意之前申请的Random对象 r;

r.nextInt(100) 表示0到100 的随机整数,包含0不包含100,即0到100的左闭右开区间,数学表示为[0,100) 别忘了取整数。

 

2.nextDouble() 

注意nextDouble()方法不能这样使用,nextDouble(100),因为压根就没这方法。

/**
 * nextDouble() 
 * 返回下一个伪随机数,从这个随机数发生器的序列中 0.0和 1.0之间的 double值 0.0分布。
 * 返回值:double
 */
@Test
public void Test_nextDouble()
{
	for(int i = 0 ;i < 100;i++)
	{
		System.out.print( i + "=" +r.nextDouble() + "	");
		if(i % 5 == 0)
			System.out.println();
	}
	System.out.println("\n///");
	for(int i = 0 ;i < 100;i++)
	{
		System.out.print( i + "=" +r.nextDouble()*100 + "		");
		if(i % 5 == 0)
			System.out.println();
	}
		
}

下面r.nextDouble()*100可以简单的理解为放大100倍,生成0-100内的double类型数据,数据太大并未测试包不包含边界值。

还有nextLong() nextFloat() nextBoolean()方法,和上面差不多,就不测试了

 

3.nextByte()

为什么单独把他拉出来呢,因为此方法的形式参数是数组类型,其他的方式的形式参数就没有数组类型的,所以测试了一下,果不其然大有学问!

/**
 * nextBytes(byte[] bytes) 
 * 生成随机字节并将它们放入用户提供的字节数组中。 
 * 返回值:void
 */
@Test
public void Test_nextBytes()
{
	byte[] b = new byte[100];
	r.nextBytes(b);
	System.out.println(Arrays.toString(b));
	//如果不提前指定多少个
	byte[] b1 ;
	//r.nextBytes(b1);//报错,必须指定个数,或者为null
	byte[] b2 = null;
//	r.nextBytes(b2);//到这里就不执行了!!
	System.out.println("///");
	System.out.println(Arrays.toString(b2));//null
	System.out.println("//");
	System.out.println(b2.length);//空的!
}

声明byte类型数组时必须声明其长度,或者指定为null,不过其结果为空  这里的空不是空格,占不占位置不知道,因为输出其长度后返回为也是空的

注意r.nextBytes(b2)如果不注释,程序就不会运行下去了,到底什么原因不清楚,反正b2本身是null,是不能赋值得吧。debug到这一句直接就停止了;

 

4. next()

/**
 * next(int bits) ;生成下一个伪随机数;
 * bits:二进制数
 * 返回值是:protected int
 */
@Test
public void Test_next()
{
	//int i = r.next(101);
	System.out.println();
	/*
	 * 由于返回值是 protected(受保护的类型),所以暂时不知道怎么用
	 */
}

不会用。返回值是是受保护的int类型,不会用。

 

以上不知其意,建议自行测试

 

5.nextGaussian() 

/**
 * nextGaussian() 
 * 从该随机数发生器的序列返回下一个伪随机数,高斯(“正”)分布 double值,平均值为 0.0 ,标准差为 1.0 。
 * 返回值:double
 */
@Test
public void Test_nextGaussian()
{
	for(int i = 1 ;i <= 100;i++)
	{
		System.out.print( i + "=" +r.nextGaussian() + "	");
		if(i % 5 == 0)
			System.out.println();
	}
}

感觉和nextDouble(0差不多,暂时不了解两者的区别,优缺点

 

6.额外测试:边界测试

测试一 测试nextInt(100)的左右边界

//Random r = new Random();
int N = 0;//记录次数,直观反映运行多少次
//测试左边界
int ans;
while(true)
{
	ans = r.nextInt(100);
	N++;
	System.out.println("第" + N +"次运行!");
	if(ans == 0)
	{
		System.out.println("存在边界0,左闭!" );
		break;
	}
}//存在结束

此段程序运行几十次上百次会结束,说明有左边界0,

把if(ans == 0) 的0改成100,运行后发现一直运行,不跳出循环,大致能证明没有右边界100

 

注意

Math方法下面有一个random方法,由于Math方法在java.lang 包下面,所以不需要导包

使用方式:Math.random() 返回值是double,范围是0到1之间,边界问题由于数据量太大,不好测试,不过大概率是不包含边界,或者左闭右开。

有时候可以用强制性类型转换:(int)Math.random()*100 表示从0-100的随机数

注意Math.random()  等于new Random().nextDouble() 方法。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值