Math.random()问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Math.random()问题相关的知识,希望对你有一定的参考价值。

Math.random()是0~1之间的数
1.那Math.random(1)Math.random(2)是什么,怎么计算的
2.Math.random()是0~1,就是小数.为什么3*Math.random()+1就是1~3之间的数??

2个问题回答其中一个就给分,2个都让我满意追加

math.random(),返回一个大于或等于0的随机数,Math.random(1),1称为种子。如果不指定种子,则以时钟作为种子值。解答如1楼。 参考技术A 兄弟其实这个很简单,“50”和50在计算机是有区别的,前者为字符串,后者为数字。而字符串和数字的加法和乘法法则的意义是不一样的
其二,一般来说,用文本框输入的任何信息,当然包括你输入的“50”或则“100”,计算机都当做字符串处理了。所以如果你想把你输入的信息按照数学那样来加减乘除,则应该把信息先转化为数字信息。
所以我的思路是在一开始就将字符串的信息转化为数字信息:
var min_num=parseInt(document.myform.l_num.value);
var max_num=parseInt(document.myform.u_num.value);

整个程序为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

the lower number:

the upper number:

另外
var num=Math.random()*(max_num-min_num)+min_num;
你说后面的不起作用,当然,JS存在隐式数据类型转化一说。
所以你也可以这样处理
var num=Math.random()*(max_num-min_num)+min_num*1;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

the lower number:

the upper number:

前者是显示转化,后者是隐式转化
希望对你有帮助
参考技术B Math.random()会随机产生一个int型的数 第一个着实没见过 0<Math.random()<1 则0<Math.random()*3<3 则1<3*Math.random()+1<4 参考技术C 在我记忆中,Math.random(1)代表0-1之间的数,所以Math.random(2)代表0-2之间的数。然后再看你定义什么类型的。3*Math.random()+1代表1-4之间的数。 参考技术D var randomNum = Math.random(); //生成随机数,范围在0到1

var index = parseInt(20000 * randomNum); //index是从randomNum 这个随机数而来,乘20000是为了得到0到20000间的整数

有关随机数问题

方法1
(数据类型)(最小值+Math.random()*(最大值-最小值+1))
例:
(int)(1+Math.random()*(10-1+1))
从1到10的int型随数
方法2
获得随机数
for (int i=0;i<30;i++)
{System.out.println((int)(1+Math.random()*10));}
(int)(1+Math.random()*10)
通过java.Math包的random方法得到1-10的int随机数
公式是:最小值---最大值(整数)的随机数
(类型)最小值+Math.random()*最大值
方法3
Random ra =new Random();
for (int i=0;i<30;i++)
{System.out.println(ra.nextInt(10)+1);}
通过java.util包中的Random类的nextInt方法来得到1-10的int随机数
 
生成0到1之间的任意随机小数:

生成[0,d)区间的随机小数,d为任意正的小数,则只需要将nextDouble方法的返回值乘以d即可。

[n1,n2]

也就是 ra.nextDouble() * (n2-n1)+n1

java产生随机数的几种方式
一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100以内的随机,这个在j2me中没有。

二.在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,他可以产生随机整数、随机float、随机double,随机long,这个也是我们在j2me的程序里经常用的一个取随机数的方法。

三.在我们的System类中有一个currentTimeMillis()方法,这个方法返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,返回类型是long,我们可以拿他作为一个随机数,我们可以拿他对一些数取模,就可以把他限制在一个范围之内啦

其实在Random的默认构造方法里也是使用上面第三种方法进行随机数的产生的


对于方法二中的Random类有以下说明:

java.util.Random类有两种方式构建方式:带种子和不带种子

不带种子:
此种方式将会返回随机的数字,每次运行结果不一样

public class RandomTest {
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
for(int i=0;i<10;i++){
    System.out.println(r.nextInt());
}

}
带种子:
此种方式,无论程序运行多少次,返回结果都是一样的

public static void main(String[] args) {
java.util.Random r=new java.util.Random(10);
for(int i=0;i<10;i++){
    System.out.println(r.nextInt());
}
}

package MyMath;
import java.util.Random;
import java.util.Scanner;

//生成随机数 调用的是系统的方法

public class random {
int h;
static Scanner sc = new Scanner(System.in);

public static void main(String args[])

{
System.out.println("请输入随机数的个数:");
int h=sc.nextInt();

Random random=new Random();

for(int i=0;i<h;i++)

{


System.out.println(random.nextInt());

}

}

}

自己对第三组中方法进行了实现,验证成功。

技术分享

方法才能调用方法,而System.out.println(x);  是一个内置方法,所以只能放到方法里去调用,不能写在类里.

代码中两个函数定义的类型不同,一个为int 另一个是double

重载方法:定义同名,但是具有不同的参数原形的方法(同一类中的两个或两个以上的方法可以有同一个名字,只要他们的参数声明表类型不同)!!!








































以上是关于Math.random()问题的主要内容,如果未能解决你的问题,请参考以下文章

在javascript中math.random()的用法问题?有没有简单一点的说明?谢谢!

Math.random() 的精度

JS:数组的 Math.random

JS:数组的 Math.random

lua math.random伪随机问题浅析

多数组的 math.random()-0.5