Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 指定随机机会_Java - Fatal编程技术网

Java 指定随机机会

Java 指定随机机会,java,Java,现在,我将生成1到5之间的随机数。我假设每个数字都有可能或有机会获得。(例如,如果您不同意,请假设) 1有20% 2有20% 3有20% 4有20% 5有20% 如我所愿,我想增加或减少一些数字的机会 1有10% 2有10% 3有35% 4有40% 5有5% 如果是这样,我可以根据自己的意愿生成随机数。有些很难得到,有些会经常得到。 如何通过Java实现它?请用一些例子或一些有用的链接或其他任何东西来支持我。我会非常感激的。请不要被建议描述一些我努力的代码,因为我不知道这一点,我要求你提供一些有

现在,我将生成1到5之间的随机数。我假设每个数字都有可能或有机会获得。(例如,如果您不同意,请假设)

1有20%

2有20%

3有20%

4有20%

5有20%

如我所愿,我想增加或减少一些数字的机会

1有10%

2有10%

3有35%

4有40%

5有5%

如果是这样,我可以根据自己的意愿生成随机数。有些很难得到,有些会经常得到。
如何通过Java实现它?请用一些例子或一些有用的链接或其他任何东西来支持我。我会非常感激的。请不要被建议描述一些我努力的代码,因为我不知道这一点,我要求你提供一些有用的建议。提前感谢。

解决方案很简单:

double r = random.nextDouble();
if (r < 0.1) ret = 1
else if (r < 0.2) ret = 2
else if (r < 0.55) ret = 3
...
double r=random.nextDouble();
如果(r<0.1)ret=1
否则,如果(r<0.2)ret=2
否则,如果(r<0.55)ret=3
...

你明白了,用累积可能性作为阈值。

解决方案很简单:

double r = random.nextDouble();
if (r < 0.1) ret = 1
else if (r < 0.2) ret = 2
else if (r < 0.55) ret = 3
...
double r=random.nextDouble();
如果(r<0.1)ret=1
否则,如果(r<0.2)ret=2
否则,如果(r<0.55)ret=3
...

您可以使用累积可能性作为阈值。

首先实例化
java.util.Random rand=new java.util.Random()。只做一次

从这里开始,一种方法是使用
double f=rand.nextDouble()为您提供一个介于(包括)0到(不包括)1之间的数字

然后使用一系列
进行变换,如果
s:

if (f < 0.1){
    return 1;
} else if (f < 0.1 + 0.1){
    return 2;
} else if (f < 0.1 + 0.1 + 0.35){
    return 3;
... /*can you see the pattern*/
if(f<0.1){
返回1;
}否则如果(f<0.1+0.1){
返回2;
}否则如果(f<0.1+0.1+0.35){
返回3;
…/*你能看到图案吗*/

这不是最快的方法,但很清楚,可以让您开始。

首先实例化
java.util.Random rand=new java.util.Random();
。只执行一次

从这里开始,一种方法是使用
double f=rand.nextDouble();
,它给出一个介于(包括)0到(不包括)1之间的数字

然后使用一系列
进行变换,如果
s:

if (f < 0.1){
    return 1;
} else if (f < 0.1 + 0.1){
    return 2;
} else if (f < 0.1 + 0.1 + 0.35){
    return 3;
... /*can you see the pattern*/
if(f<0.1){
返回1;
}否则如果(f<0.1+0.1){
返回2;
}否则如果(f<0.1+0.1+0.35){
返回3;
…/*你能看到图案吗*/

这不是最快的方法,但很清楚,可以让您开始。

我不知道是否有办法使用随机库。 但我认为你可以生成一个1到100之间的随机数。 因此,您可以在以下两者之间进行编码:

1和10你得到1, 11和20你得到2, 21和55你得到3


等等

我不知道是否有办法使用随机库。 但我认为你可以生成一个1到100之间的随机数。 因此,您可以在以下两者之间进行编码:

1和10你得到1, 11和20你得到2, 21和55你得到3


等等

我可以考虑的另一个选择是

int[] a = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 5, 5, 5, 5, 5};

Random r = new Random();
return a[ r.nextInt(100) ];

我能想到的另一个选择是

int[] a = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 5, 5, 5, 5, 5};

Random r = new Random();
return a[ r.nextInt(100) ];

你已经有了百分比——想象一下你掷骰子的值是1-100。1-10=>1.11-20=>2.31-55=>3.56-95=>4.96-100=>5。现在想想如何编码。创建一个包含10个1、10个2、35个3、40个4和5个5的列表。重新排列列表。选择第一个元素。瞧!@AskThakare正如我所描述的,
有些人很难找到一个有些人会经常获得收益。
你有百分比-所以想象你掷骰子的值为1-100。1-10=>1.11-20=>2.31-55=>3.56-95=>4.96-100=>5。现在想想如何编码。创建一个包含10个1、10个2、35个3、40个4和5个5的列表。洗牌列表。选择第一个元素。瞧!@AskThakare作为我的描述ibed,
有些很难获得,有些会经常获得。
哦!你的意思是我需要指定硬代码吗?啊,是的,Anony Mouse和Bathsheba的解决方案足够好…这就是为什么我说Alternative哦!你的意思是我需要指定硬代码吗?啊,是的,Anony Mouse和Bathsheba的解决方案足够好…这就是w我为什么说另类