我只是想首先说我在过去3个小时内一直在搜索这个(以及其他一些)网站但是没有用,我已经阅读了我能找到的关于我的主题的每个帖子,或者它做了不适用或我无法理解发生了什么。
我有2个问题。
我似乎无法让随机数生成器在制作完成后放弃选择。
我的第二个问题是每场比赛只能进行一轮六轮比赛,我似乎无法弄清楚如何将其限制为只有6轮的特定限制。
该程序旨在模拟选择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 );
}
}
答案 0 :(得分:0)
由于格式化,您的问题域或您的代码,我无法理解您的问题。
但是我认为你说你要随机化一些数字,而不是替换。
这样做的一些策略是:
创建一个数字列表,然后随机播放,每次需要一个随机数时都会弹出一个数字,直到你的“套牌”为空。
维护一组已经绘制的数字。如果数字在集合中,则随机化另一个。
匹配6点回合约束的懒惰/暴力方法将是提前构建你的编队+竞赛,完整的。检查它是否符合您的约束条件,如果没有,则重新生成整个竞争对手。
如果约束无效的可能性相当低,这在性能方面真的很经济。 &LT; 30-40%
否则,您只能重新生成当前地层,但您需要检查是否仍有可能的有效地层。我也不确定这会对你的随机编队的分布造成多大的影响。