Java中如何获取新放置数字在二维数组中的行列位置?
问题解决与代码修正
你的returnLocation方法编译失败主要有两个核心问题:
- 类型不匹配错误:
board[row]是一个int[]数组,而rowAndColumn[0]是int类型,直接赋值会导致编译报错 - 逻辑方向完全错误:你应该将找到的行/列索引赋值给
rowAndColumn数组,而不是修改原board数组
修正后的代码
public static int[] returnLocation(int[][] board, String columnInput, int randomNumber) { int[] rowAndColumn = new int[2]; // 把列字母转成对应的索引,避免重复的if判断 int columnIndex = switch (columnInput) { case "A" -> 0; case "B" -> 1; case "C" -> 2; case "D" -> 3; case "E" -> 4; case "F" -> 5; default -> -1; // 非法输入的默认值,可根据需求处理 }; if (columnIndex != -1) { for (int row = 0; row < board.length; row++) { if (board[row][columnIndex] == 0) { // 给结果数组赋值:第一个元素是行索引,第二个是列索引 rowAndColumn[0] = row; rowAndColumn[1] = columnIndex; break; // 找到第一个空位就停止循环,和putNumber逻辑一致 } } } return rowAndColumn; }
关键修正点说明
- 简化列索引转换:用switch表达式替代重复的if判断,代码更简洁易维护
- 修正赋值逻辑:将找到的行号
row赋值给rowAndColumn[0],列索引赋值给rowAndColumn[1],完全反转了你原来的错误赋值方向 - 添加循环终止条件:找到第一个空位后立即
break,和putNumber方法的逻辑保持一致,避免无效遍历 - 非法输入处理:增加了默认分支处理无效列输入,避免数组越界
如果你的Java版本低于14,不支持switch表达式,可以换成传统switch语句:
int columnIndex = -1; switch (columnInput) { case "A": columnIndex = 0; break; case "B": columnIndex = 1; break; case "C": columnIndex = 2; break; case "D": columnIndex = 3; break; case "E": columnIndex = 4; break; case "F": columnIndex = 5; break; }
内容的提问来源于stack exchange,提问作者MazaPan616
相关产品推荐
相关产品推荐

