
java中概率的问题
我刚开始学java,问个问题,比如给一个变量定义成1-3之间任意一个数的,有1/20的可能为1,2/20可能为2,怎么表示出这个概率?就是想定义个函数,函数返回的值是随机...
我刚开始学java,问个问题,比如给一个变量定义成1-3之间任意一个数的,有1/20的可能为1,2/20可能为2,怎么表示出这个概率?
就是想定义个函数,函数返回的值是随机的,有1/20的概率返回1,有2/20的概率返回2,不是这1、2就返回3. 展开
就是想定义个函数,函数返回的值是随机的,有1/20的概率返回1,有2/20的概率返回2,不是这1、2就返回3. 展开
7个回答
展开全部
你的问题描述不清。
如果是别的数字是均等的,那把一个单独处理,别的数字分享17/20的概率。实际上是一个映射的问题。具体实现就是拿20个数字做random,然后取整,比如1->1,2、3->2,若是其它,则重新获取一个3的random,当然要把1和2给去掉
——————————————
那不就更容易了,剩下的不需要重新获取random了,直接就是3
————————————————————————
public static void main(String arg[]) {
System.out.println(getInt());
}
private static long getInt() {
long a = Math.round(Math.random() * 20);
if (a == 0 || a == 1) {
return 1;
} else if (a == 2) {
return 2;
} else {
return 3;
}
}
如果是别的数字是均等的,那把一个单独处理,别的数字分享17/20的概率。实际上是一个映射的问题。具体实现就是拿20个数字做random,然后取整,比如1->1,2、3->2,若是其它,则重新获取一个3的random,当然要把1和2给去掉
——————————————
那不就更容易了,剩下的不需要重新获取random了,直接就是3
————————————————————————
public static void main(String arg[]) {
System.out.println(getInt());
}
private static long getInt() {
long a = Math.round(Math.random() * 20);
if (a == 0 || a == 1) {
return 1;
} else if (a == 2) {
return 2;
} else {
return 3;
}
}
追问
恩 我根据大家说的自己想了下写出的代码和您差不多,不过发现结果基本不会出现1、2,后来我把
if (a == 0 || a == 1) {
return 1;
} else if (a == 2) {
return 2;
}
这段改为
if (a > 0 && a 1&&a<3) {
return 2;
}解决了这个问题
展开全部
有1/20的几率为1,2/20的几率为2,就是说有17/20的几率为3了吧。
那你用Random类或者Math.random()方法来产生1~20的随机数。
如果产生出来的数是1(1个),就把变量定义为1
如果产生出来的数是2~3(2个),就把变量定义为2
其余就把变量定义为3
那你用Random类或者Math.random()方法来产生1~20的随机数。
如果产生出来的数是1(1个),就把变量定义为1
如果产生出来的数是2~3(2个),就把变量定义为2
其余就把变量定义为3
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int[] a={1,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3};
int index = getRandom(1,20);//返回1到20之间的一个随机数。1~20每个随机数的概率为1/20
index=1=>1/20;取值为1的概率就是1/20
index=2=>1/20;
index=3=>1/20; 当等于2或3时,a[index-1]取值都等于2,也就是取值为2的概率等于1/20+1/20,取值为3的概率就是17个1/20相加。
int varparam = a[index-1];//取值为1的可能性为1/20;取值为2的可能性为2/20;取值为3的概率为17/20
/**
*
* @param start
* @param end
* @return >= start && <=end 的随机数
* end需大于start 否则返回-1
*/
public static int getRandom(int start,int end){
if(start>end || start <0 || end <0){
return -1;
}
return (int)(Math.random()*(end-start+1))+start;
}
int index = getRandom(1,20);//返回1到20之间的一个随机数。1~20每个随机数的概率为1/20
index=1=>1/20;取值为1的概率就是1/20
index=2=>1/20;
index=3=>1/20; 当等于2或3时,a[index-1]取值都等于2,也就是取值为2的概率等于1/20+1/20,取值为3的概率就是17个1/20相加。
int varparam = a[index-1];//取值为1的可能性为1/20;取值为2的可能性为2/20;取值为3的概率为17/20
/**
*
* @param start
* @param end
* @return >= start && <=end 的随机数
* end需大于start 否则返回-1
*/
public static int getRandom(int start,int end){
if(start>end || start <0 || end <0){
return -1;
}
return (int)(Math.random()*(end-start+1))+start;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.概率这个东西要计算的.
2.利用随机数,循环N次,在统计吧
3.给你个例子,你看看
public static void main(String[] args) {
double sum0 = 0;
double sum1 = 0;
double sum2 = 0;
double sum3 = 0;
int all = 10000;
for (int i = 0; i < all; i++) {
int num = (int) (Math.random() * 4);
if (num == 0) {
sum0++;
}
if (num == 1) {
sum1++;
}
if (num == 2) {
sum2++;
}
if (num == 3) {
sum3++;
}
}
System.out.println("0的概率:" + (sum0 / all));
System.out.println("1的概率:" + (sum1 / all));
System.out.println("2的概率:" + (sum2 / all));
System.out.println("3的概率:" + (sum3 / all));
}
自己运行下,每次的结果都是不一样的
2.利用随机数,循环N次,在统计吧
3.给你个例子,你看看
public static void main(String[] args) {
double sum0 = 0;
double sum1 = 0;
double sum2 = 0;
double sum3 = 0;
int all = 10000;
for (int i = 0; i < all; i++) {
int num = (int) (Math.random() * 4);
if (num == 0) {
sum0++;
}
if (num == 1) {
sum1++;
}
if (num == 2) {
sum2++;
}
if (num == 3) {
sum3++;
}
}
System.out.println("0的概率:" + (sum0 / all));
System.out.println("1的概率:" + (sum1 / all));
System.out.println("2的概率:" + (sum2 / all));
System.out.println("3的概率:" + (sum3 / all));
}
自己运行下,每次的结果都是不一样的
追问
不好意思你可能理解错了,我是想定义有1/20的可能取1,2/20的可能取2,其余是3,。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
取1-20之间的随机数,随机数为1则显示1,随机数为2或3则显示2,这样不就是1/20、2/20了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询