Java实现赛事对阵随机生成时4个无重复变量程序无输出问题
问题根因
你代码中每个随机值的生成逻辑为(int)(Math.random()*3),只能生成0、1、2这3个不同的整数,但你的循环判断要求w、x、y、z四个变量全部互不相等,从3个数值里选4个不重复的数逻辑上不可能成立,因此do-while循环会永远运行,陷入死循环,自然不会有后续输出。
修复方案
直接修正现有逻辑
如果你的赛事共有4支队伍,只需要把随机数生成的乘数从3改为4,即可生成0~3范围的4个不同整数,满足4个变量互不相等的要求,修正后的代码如下:
public void generateMatches() { int w, x, y, z; do { w = (int)(Math.random()*4); x = (int)(Math.random()*4); y = (int)(Math.random()*4); z = (int)(Math.random()*4); } while (x == y || y == z || x == z || x == w || y == w || z == w); // 后续添加对阵安排输出逻辑即可 }
注意:原有代码在do循环前重复赋值属于冗余操作,可以直接删除
更优实现方案
生成不重复的随机队伍序列,更推荐用集合洗牌的方式实现,效率更高,也避免了多次随机生成、判断的消耗:
public void generateMatches() { // 初始化4支队伍的编号 List<Integer> teams = new ArrayList<>(Arrays.asList(0,1,2,3)); // 随机打乱顺序 Collections.shuffle(teams); int w = teams.get(0); int x = teams.get(1); int y = teams.get(2); int z = teams.get(3); // 后续添加对阵安排输出逻辑即可 }
内容的提问来源于stack exchange,提问作者Jean Bonnici
相关产品推荐
相关产品推荐

