Java创建2行3列二维数组元素缺失、3行2列正常运行的问题咨询
问题根因
你代码的核心错误是双层循环的内层判断条件误用了二维数组第一维的长度:
- Java中的二维数组本质是「元素为一维数组的数组」,
tab.length永远获取的是第一维的长度(也就是你定义的行数) - 控制列数的内层循环需要获取当前行对应的一维数组的长度,即
tab[i].length,才是每一行的列数
现象对应说明
你当前定义的是int[][] tab = new int[2][3],即2行3列:
tab.length的值是2,你的内外层循环都用j < tab.length作为判断条件,相当于每一行只遍历前2列- 总赋值/打印的元素只有
2行*2列=4个,和你预期的2*3=6个相比恰好少了2个元素,和你描述的现象完全一致
你之前写3行2列时能正常运行,本质是巧合:如果严格定义int[][] tab = new int[3][2],内层循环用j < tab.length(值为3)会直接触发数组下标越界异常,说明你当时大概率误把行列参数写反了,才刚好匹配了循环条件。
修正后代码
import java.util.Scanner; class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[][] tab = new int[2][3]; int number = 1; for (int i = 0; i < tab.length; i++) { // 内层循环判断条件改为当前行的数组长度 for (int j = 0; j < tab[i].length; j++) { tab[i][j] = number++; } } for (int i = 0; i < tab.length; i++) { // 打印逻辑的内层循环同样修改 for (int j = 0; j < tab[i].length; j++) { System.out.printf("tab[%d][%d]=%d \n", i, j, tab[i][j]); } } } }
内容的提问来源于stack exchange,提问作者PokémonTrainer
相关产品推荐
相关产品推荐

