Java二维数组遍历抛出ArrayIndexOutOfBoundsException异常求助
异常触发原因
核心问题是内层for循环的判断条件写错了控制变量:内层循环负责遍历列下标j,但判断条件写的是i < m1[0].length,而非j < m1[0].length。
具体执行逻辑:
- 你定义的二维数组
m1为2行3列结构,行下标最大为1,列下标最大为2 - 外层循环
i第一次取值为0时进入内层循环:- 内层循环判断条件为
i < 3,此时i值为0永远满足判断条件,循环不会自动终止 j会持续自增:j=0、1、2时分别输入前三个数1、2、3,运行正常;当j自增到3时仍会继续执行输入逻辑,你输入第4个数4之后,程序尝试给m1[0][3]赋值,此时列长度为3,下标最大为2,直接触发数组越界异常。
- 内层循环判断条件为
修复方案
将内层for循环的判断条件替换为j的边界判断即可,推荐写成j < m1[i].length,可适配单行长度不一致的二维数组场景,兼容性更好。
修复后完整代码:
import java.util.Scanner; public class arrays { public static void main(String[] args) { int i; int [][] m1 = new int[2][3]; int j; Scanner sc = new Scanner(System.in); System.out.println(m1.length); System.out.println(m1[0].length); for(i = 0; i < m1.length; i++){ // 仅修改此处判断变量,把i替换为j即可 for(j = 0; j < m1[i].length; j++) { m1[i][j] = sc.nextInt(); } } sc.close(); } }
内容的提问来源于stack exchange,提问作者Imbroz Singh
相关产品推荐
相关产品推荐

