You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现用户输入行列的随机二维数组时报ArrayIndexOutOfBoundsException求解

异常触发原因

  • 变量复用问题:存储用户输入行数、列数的rows、columns变量被直接用作循环计数器,原始输入值被覆盖,引发逻辑混乱。
  • 内层循环终止条件错误:内层循环用于遍历单行列元素,终止条件应该为列计数器小于当前行的长度myArray[rows].length,你错误使用了二维数组的行数myArray.length作为判断依据,会导致列索引超出实际列的范围。
  • 循环体缺少大括号:内层for循环没有包裹大括号,只有紧跟的数组赋值语句属于内层循环,打印语句被放到了内层循环外。内层循环结束时列计数器已经自增到超出数组索引的合法范围,此时执行打印语句访问数组直接触发越界异常。

修复方案

  1. 单独定义循环计数器变量,不要复用存储用户输入的rows、columns变量。
  2. 修正内层循环的终止条件为判断列计数器小于当前行的长度。
  3. 给内层循环加上大括号,把赋值和打印逻辑都包裹到循环体中,也可以每打印完一行后加换行,输出更清晰。

修复后的代码如下:

import java.lang.Math;
import java.util.Scanner;

public class test2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter rows for the array: ");
        int rows = scan.nextInt();
        System.out.print("Enter columns for the array: ");
        int columns = scan.nextInt();

        int [][] myArray = new int [rows][columns];

        // 单独定义循环计数器i代表行索引,j代表列索引
        for (int i = 0; i < myArray.length; i++) {
            // 内层循环终止条件改为当前行的长度
            for (int j = 0; j < myArray[i].length; j++) {
                myArray[i][j] = (int) (Math.random()*100);
                System.out.print(myArray[i][j] + "\t");
            }
            // 每打印完一行加换行
            System.out.println();
        }
        scan.close();
    }
}

内容的提问来源于stack exchange,提问作者Ransome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:27:02