选择完成后,让随机数生成器删除选项? JAVA

时间:2017-06-18 23:54:27

标签: java arrays random

我只是想首先说我在过去3个小时内一直在搜索这个(以及其他一些)网站但是没有用,我已经阅读了我能找到的关于我的主题的每个帖子,或者它做了不适用或我无法理解发生了什么。

我有2个问题。

  1. 我似乎无法让随机数生成器在制作完成后放弃选择。

  2. 我的第二个问题是每场比赛只能进行一轮六轮比赛,我似乎无法弄清楚如何将其限制为只有6轮的特定限制。

  3. 该程序旨在模拟选择a的跳跃     跳伞比赛。有三个单独的比赛     (A,AA,AAA)(难度级别,某些动作不会出现A或     AA,AAA是全包的)用户可以从中选择     个人比赛是6轮还是10轮(A将会     总是6轮)。一旦用户选择了比赛并且     轮数,该程序应该输出个人     每轮完成的动作以及动作的分数     回合(对于所有6轮或10轮比赛都这样做)。这是     我的第一个问题在哪里:

    一旦采取行动,就不可能     再次用于其余的比赛。我不能为了     我的生活弄清楚如何做到这一点。

    继续前进,有两个     单独的评分类别,编号的动作(我的1-22)     程序)和字母移动(23和以上),编号是值得的     2分和字母值1.每轮5或6分

    我遇到的问题是有6点回合,它只能由3个编号的动作组成,没有其他     组合是可以接受的;并且除此之外,只有     在整个比赛中获得六分球。*

         for(int i=0; i < round; i++ )
         {
            System.out.printf("\nRound %d:\n", i+1);
            point = 0;
    
            while(point < 5)   
            { 
            pickedRandom=false;  
            formation = myRandom.nextInt(38) + 1;
    
                while(formation == 31) 
                {
                    formation = myRandom.nextInt(38) + 1;
                }
    
                if(point == 4 && pickedRandom && formation < 23 )       
                {
                    while(formation < 23)
                    formation = myRandom.nextInt(38) + 1;
                }
    
                if(formation < 23)
                {
                    point+=2;                   
                }
                else
                {
                    pickedRandom=true;
                    point++;
    
                }
    
                formationRound.set( formation, true );
    
                if(formation > 22)
                System.out.printf(" %s %s ",randomLetter(formation), formationName(formation));
    
                else
                System.out.printf(" %d %s", formation, formationName(formation)); 
    
             }
                System.out.println();
                System.out.printf( " %s \n", point );    
        }
    }
    

1 个答案:

答案 0 :(得分:0)

由于格式化,您的问题域或您的代码,我无法理解您的问题。

但是我认为你说你要随机化一些数字,而不是替换。

这样做的一些策略是:

  1. 创建一个数字列表,然后随机播放,每次需要一个随机数时都会弹出一个数字,直到你的“套牌”为空。

  2. 维护一组已经绘制的数字。如果数字在集合中,则随机化另一个。

  3. 匹配6点回合约束的懒惰/暴力方法将是提前构建你的编队+竞赛,完整的。检查它是否符合您的约束条件,如果没有,则重新生成整个竞争对手。

    如果约束无效的可能性相当低,这在性能方面真的很经济。 &LT; 30-40%

    否则,您只能重新生成当前地层,但您需要检查是否仍有可能的有效地层。我也不确定这会对你的随机编队的分布造成多大的影响。