二维数组每行生成6个不重复随机数的代码问题求助
问题分析与修复
原代码的核心问题在于重复检查逻辑完全偏离需求,且重复时的回退逻辑混乱:
- 需求要求每行内部的6个数字互不重复,但原代码是和其他行的同列数字对比,完全没检查当前行已生成的元素是否重复。
- 发现重复时回退行索引
a--,会导致整行重新生成,不仅效率低下,还会引发循环逻辑错乱。
修正后的代码
// anzahlDerSpiele 代表二维数组的行数,比如需求中的2行 for (int a = 0; a < anzahlDerSpiele; a++) { // 遍历当前行的每一列 for (int b = 0; b < 6; b++) { int randomNum; boolean schonDrinne; do { // 直接生成1-48范围内的整数随机数 randomNum = (int) (Math.random() * 48) + 1; schonDrinne = false; // 检查当前行已生成的前b个元素是否重复 for (int j = 0; j < b; j++) { if (zahlenRandom[a][j] == randomNum) { schonDrinne = true; break; } } } while (schonDrinne); // 生成重复数字就重新生成 zahlenRandom[a][b] = randomNum; } }
关键改进点
- 重复检查逻辑修正:仅对比当前行内已生成的元素(
j从0到b-1),确保同一行内无重复数字。 - 生成逻辑简化:一步生成1-48的整数,避免多余的类型转换和
round操作。 - 循环重试机制:用
do-while循环针对当前列的元素单独重试,直到生成不重复的数字,不会影响整行或其他行的生成流程。
内容的提问来源于stack exchange,提问作者Nic
相关产品推荐
相关产品推荐

