Java 生成范围(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代 我将在数组中为该函数的输出设置一个位置。该函数位于文章的末尾。 问题是让函数停止自己调用。这段代码出现堆

我需要生成随机数作为一个名为randomize的函数的输出。我正在尝试生成0到4之间的数字。但是,

  • 一旦生成了2次0,停止生成0,
    blankCount
    0代计数
  • 一旦1生成4次,停止生成1,
    birdCount
    1次计数
  • 一旦2生成1次,停止生成2,
    specialCount
    统计2代
  • 一旦生成2次3,停止生成3,
    nullCount
    3次计数
  • 一旦4生成1次,停止生成4,
    crashCount
    统计4代
我将在数组中为该函数的输出设置一个位置。该函数位于文章的末尾。 问题是让函数停止自己调用。这段代码出现堆栈溢出错误

目标是有两个0、四个1、一个2、两个3和一个4

0,0,1,1,1,1,2,3,3,4

有人能帮助实现这个功能吗

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 a
1
,请确保原始列表中最多只有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++);
}