如何为二维数组每个索引赋随机整数?Java代码存在赋值不全问题
问题分析与修复
你的代码填不满数组的核心原因有两个:
- 循环次数设成了最多24次,但5×5数组有25个位置,本身次数就不够;更糟的是,遇到随机到已填充的位置时,你只是让
x加1就跳过了,没做任何有效赋值,导致实际填充的数量远低于24。 - 你写的
else if(board2D[columnRandom][rowsRandom] == m)逻辑完全没用,因为m是你接下来要填的数,之前填的都是1到m-1,这个条件永远不会成立,等于根本没处理重复位置的情况。
修正后的代码
import java.util.Random; public class Main { public static void main(String[] args) { int[][] board = new int[5][5]; int sNA = 5; sequenceMaker(board); drawBoard(board); } public static void drawBoard(int[][] board2D) { for(int i = 0; i < board2D.length; i++){ for(int j=0; j < board2D[i].length; j++){ System.out.print(board2D[i][j] + " "); } System.out.println(); } } public static void sequenceMaker(int[][] board2D) { Random rand = new Random(); int m = 1; // 要填充1到25,共25个数字 while(m <= 25){ int columnRandom = rand.nextInt(5); int rowsRandom = rand.nextInt(5); // 如果当前位置是空的(初始值0),就赋值 if(board2D[columnRandom][rowsRandom] == 0) { board2D[columnRandom][rowsRandom] = m; m += 1; } // 如果位置已被填充,什么都不做,循环会重新生成随机位置 } } }
关键改动说明
- 循环条件改为
m <=25:直接以需要填充的数字数量为终止条件,只要还没填完25个数,就一直循环,确保所有位置都被填满。 - 去掉无效的else if分支:不需要判断等于
m的情况,只要位置为空就赋值,否则重新生成随机坐标,直到找到空位置。 - 删除多余的x变量:原来的
x变量只会限制循环次数,导致遇到重复时无法继续尝试填充,现在完全不需要它。
这样修改后,代码会不断生成随机坐标,直到每个位置都被分配1到25的随机整数,不会再出现填充不完整的问题。
内容的提问来源于stack exchange,提问作者Mikolaj Ciuraba
相关产品推荐
相关产品推荐

