Java:怎样产生1~6的随机数,并使1~4产生的概率大一些呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:怎样产生1~6的随机数,并使1~4产生的概率大一些呢?相关的知识,希望对你有一定的参考价值。

int n = (int)(Math.random()*6+1); 可以产生1~6的随机数,但怎样能使1~4的产生概率大一些呢

用概率模型,先随机一次看取用哪个概率,随后再随机一次。代码示例如下:

import java.util.Random;
public class HelloWorld 
 public static void main(String[] args) 
 
  Random random = new Random();
  double p1=0.7; //1~4的概率
  double p=(((int)random.nextInt(10)%(10)+1)*1.0/10 < p1)?p1:(1-p1); //实际所取概率
  int max=(p==p1)?4:6;
  int num=(int)random.nextInt(max)%(max)+1;
  System.out.print(num);
 

参考技术A

给提供一个小思路吧,当然你也可以搜索 "随机数 权重"来查看更多资料。

public int getRadomInt()
    int m = (int)(Math.random()*10+1);
    if(m<7)
        return (int)(Math.random()*4+1);
     else 
        return (int)(Math.random()*4+1+2);
    

好久没写Java代码了,不知道对不对。


大体意思就是,先随机 1到10,假定为 概率相同,那么 当出现的数小于等于6,就随机出1到4,那么随机到 1到4 的概率就是 60%。

这样应该能明白了吧。

参考技术B 那就不叫随机了啊。但是你可以加个if判断如果在1~4的话,输出,不再的话在做一次随机。第二次不管结果是什么都直接输出。

在C语言中怎样产生随机的字符串

在VC中,怎样产生一个随机的字符串?
有没有什么库函数?
或者用什么思想来实现设计算法?
最好以代码为例哈,
谢谢!

直接产生随机的字符串的库函数是没有的,
但是可以这么实现:
1.产生固定长度的随机的字符串
主要就是产生固定个数的随机字符,
那么就简单了,用两组随机数:
一组:随机产生0~25的整数num,然后用'a'+num来赋值小写字母,'A'+num来赋值大写字母
一组:随机产生0,1,产生0,用'a'来和num相加,生成小写字母;产生1,用'A'来和num相加,生成大写字母;

2.产生不固定长度的随机的字符串
就是在上面的产生固定长度的随机的字符串的基础上,在引入一组随机数,来控制字符串长度

代码如下:
1.产生固定长度的随机的字符串
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define N 10//固定长度为10

void main()

int flag,charLengt;
int i,j,k=0;
char ch[N+1]=NULL;
srand((unsigned)time(NULL));

for(i=0;i<10;i++)//生成10个String吧

for(j=0;j<N;j++)

flag=rand()%2;
if(flag) ch[k++]='A'+rand()%26;
else ch[k++]='a'+rand()%26;

ch[k]='\0';
k=0;
printf("%s\n",ch);


getch();


不定长的自己参照着写吧
参考技术A //产生长度为length的随机字符串
char* genRandomString(int length)

int flag, i;
char* string;
srand((unsigned) time(NULL ));
if ((string = (char*) myMalloc(length)) == NULL )

myLog("Malloc failed!flag:14\n");
return NULL ;


for (i = 0; i < length - 1; i++)

flag = rand() % 3;
switch (flag)

case 0:
string[i] = 'A' + rand() % 26;
break;
case 1:
string[i] = 'a' + rand() % 26;
break;
case 2:
string[i] = '0' + rand() % 10;
break;
default:
string[i] = 'x';
break;


string[length - 1] = '\0';
return string;
参考技术B #include <stdlib.h>

...

char R[26]='A',....'Z'
char C[100] = 0;

for(int n=0;n<100;n++)

C[n] = R[rand()%26];

参考技术C 能把问题说得具体一点吗?

以上是关于Java:怎样产生1~6的随机数,并使1~4产生的概率大一些呢?的主要内容,如果未能解决你的问题,请参考以下文章

Java中怎样产生随机数和随机字母

关于Java里产生1-6随机数的方法

C#中怎样用Random产生1到10之间的随机数

java编码中怎样产生四位随机数

怎样用java产生一个指定范围的随机数?

关于Java里产生1-6随机数的方法