Java如何实现6*6棋盘随机填充8个K其余位置全部为L
代码修改方案
实现逻辑
- 先将6*6棋盘的所有单元格默认填充为
L - 循环生成随机行列坐标,仅当目标位置为
L时将其改为K,直到成功填充8个K为止,从逻辑上保证K的数量精确符合要求 - 原有棋盘打印逻辑无需调整
修改后完整代码
public class SimpsonsBoard { public static void main(String[] args) { String[][] board = new String[6][6]; // 初始化所有单元格为L for(int i=0; i<board.length; i++) { for(int j=0; j<board[i].length; j++) { board[i][j] = String.valueOf('L'); } } // 随机填充8个不重复的K int kAmount = 0; while (kAmount < 8) { int randomRow = (int)(Math.random() * 6); int randomCol = (int)(Math.random() * 6); if (board[randomRow][randomCol].equals("L")) { board[randomRow][randomCol] = String.valueOf('K'); kAmount++; } } // 原有打印逻辑保留 System.out.println(" ─────────────"); System.out.println("│" + board[0][0] + "│" + board[0][1] + "│" + board[0][2] + "│" + board[0][3] + "│" + board[0][4] + "│" + board[0][5] + "│"); System.out.println(" ─────────────"); System.out.println("│" + board[1][0] + "│" + board[1][1] + "│" + board[1][2] + "│" + board[1][3] + "│" + board[1][4] + "│" + board[1][5] + "│"); System.out.println(" ─────────────"); System.out.println("│" + board[2][0] + "│" + board[2][1] + "│" + board[2][2] + "│" + board[2][3] + "│" + board[2][4] + "│" + board[2][5] + "│"); System.out.println(" ─────────────"); System.out.println("│" + board[3][0] + "│" + board[3][1] + "│" + board[3][2] + "│" + board[3][3] + "│" + board[3][4] + "│" + board[3][5] + "│"); System.out.println(" ─────────────"); System.out.println("│" + board[4][0] + "│" + board[4][1] + "│" + board[4][2] + "│" + board[4][3] + "│" + board[4][4] + "│" + board[4][5] + "│"); System.out.println(" ─────────────"); System.out.println("│" + board[5][0] + "│" + board[5][1] + "│" + board[5][2] + "│" + board[5][3] + "│" + board[5][4] + "│" + board[5][5] + "│"); System.out.println(" ─────────────"); } }
该方案适配小规格棋盘时逻辑简单、运行效率足够。如果后续需要适配更大尺寸棋盘、更多K值的场景,可以改用洗牌算法生成所有坐标的打乱序列,取前N个坐标赋值K即可,避免随机坐标重复碰撞带来的性能损耗。
内容的提问来源于stack exchange,提问作者Vicente Mateu
相关产品推荐
相关产品推荐

