Java 生成范围(0-4)内的随机数,并限制每个数字只能生成一定次数?
我需要生成随机数作为一个名为randomize的函数的输出。我正在尝试生成0到4之间的数字。但是,Java 生成范围(0-4)内的随机数,并限制每个数字只能生成一定次数?,java,recursion,processing,Java,Recursion,Processing,我需要生成随机数作为一个名为randomize的函数的输出。我正在尝试生成0到4之间的数字。但是, 一旦生成了2次0,停止生成0,blankCount0代计数 一旦1生成4次,停止生成1,birdCount1次计数 一旦2生成1次,停止生成2,specialCount统计2代 一旦生成2次3,停止生成3,nullCount3次计数 一旦4生成1次,停止生成4,crashCount统计4代 我将在数组中为该函数的输出设置一个位置。该函数位于文章的末尾。 问题是让函数停止自己调用。这段代码出现堆
- 一旦生成了2次0,停止生成0,
0代计数blankCount
- 一旦1生成4次,停止生成1,
1次计数birdCount
- 一旦2生成1次,停止生成2,
统计2代specialCount
- 一旦生成2次3,停止生成3,
3次计数nullCount
- 一旦4生成1次,停止生成4,
统计4代crashCount
int blankCount = 0;
int birdCount = 0;
int specialCount = 0;
int nullCount = 0;
int crashCount = 0;
int randomize(){
int num = 0;
int randomNum = floor(random(0,5));
if(randomNum == 0 && blankCount <= 1) {
blankCount++;
num = randomNum;
}else if(randomNum == 0 && blankCount == 2){
num = randomize();
}else if(randomNum == 1 && birdCount <= 3){
birdCount++;
num = randomNum;
}else if(randomNum == 1 && birdCount == 4){
num = randomize();
}else if(randomNum == 2 && specialCount <= 0){
specialCount++;
num = randomNum;
}else if(randomNum == 2 && specialCount == 1){
num = randomize();
}else if(randomNum == 3 && nullCount <= 1){
nullCount++;
num = randomNum;
}else if(randomNum == 3 && nullCount == 2){
num = randomize();
}else if(randomNum == 4 && crashCount <= 0){
crashCount++;
num = randomNum;
}else if(randomNum == 4 && crashCount == 1){
num = randomize();
}else{
print("H ");
}
return num;
}
int blankCount=0;
int birdCount=0;
int specialCount=0;
int nullCount=0;
int crashCount=0;
int随机化(){
int num=0;
int randomNum=地板(随机(0,5));
如果(randomNum==0&&blankCount首先列出您可以合法返回的每个项目
然后,洗牌
然后,要生成一个随机数,只需使用洗牌列表中的下一个项目。瞧,如果您永远不想要超过4x a1
,请确保原始列表中最多只有4个1
值
我不知道你的random(0,5)
是做什么的,但是用它来生成随机数听起来像是被设计破坏了(鸽子洞原理)——java有一个随机类,它有一个更好的API,没有破坏,请务必使用它
class Randomizer {
private static final List<Integer> INPUTS = List.of(0, 0, 1, 1, 1, 1, 2, 3, 3, 4);
private final List<Integer> list;
private int pos = 0;
public Randomizer() {
list = new ArrayList<Integer>(INPUTS);
Collections.shuffle(list);
}
public int next() {
return list.get(pos++);
}
}
实际上,他们正在使用的random()函数已经在使用java的random类了。@Kamakura我查过了,它确实坏了。对于processing的普通目标用户来说,可能还不够重要,但是如果你正在写,比如说,一个扑克网站,这可能会让你后悔莫及。有X十亿个数字需要计算。random()可以生成,如果您想将其提取为3个独立的选项,则不可能“统一”,除非3完美地划分为X十亿。搜索“鸽子洞原理”以了解其稍微被破坏的原因。随机的。nextInt(X)是正确的选择。不接受任何浮点加法和四舍五入。
public int next() {
if (pos == list.size()) {
Collections.shuffle(list); // reshuffle
pos = 0;
}
return list.get(pos++);
}