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

Java乘法表生成程序数组索引越界及功能异常排查求助

问题根源与修复方案

你的所有异常都来自printGrid方法里的循环逻辑错误,咱们一步步拆解问题:

核心错误点

  1. 循环遍历的维度完全搞反了
    在createMultiplicationArray里,你创建的是int[width][height],意味着这个二维数组有width行,每行有height个元素(列数)。但printGrid里的第一个循环却用multiGrid[0].length(也就是列数height)作为终止条件,这会导致:

    • 当width < height时,循环会尝试访问multiGrid[width]、multiGrid[width+1]...直到height-1,而这些行根本不存在,直接抛出Index n out of bounds for length n
    • 当width > height时,循环只执行height次,只打印前height行,后面的行完全没处理,看起来像“突然停止”
  2. 错误引用了multiGrid[1].length
    第二个循环用multiGrid[1].length作为终止条件,这会在width=1时直接报错——因为multiGrid只有1行,multiGrid[1]是不存在的,这也是1×n或n×1形式完全无法工作的原因。

  3. 缺少Scanner类的导入
    原代码里用到了Scanner但没导入,会导致编译错误,这个也要补上。

修复后的完整代码

import java.util.Scanner; // 补充Scanner的导入

class Main { 
    public static int[][] createMultiplicationArray(int width, int height){ 
        int[][] multiGrid = new int[width][height]; 
        for(int i = 0; i < width; i ++){ 
            for(int j = 0; j < height; j ++){ 
                multiGrid[i][j] = (i+1) * (j+1); 
            } 
        } 
        return multiGrid; 
    } 
    public static void printGrid(int[][] multiGrid){ 
        // 第一个循环遍历所有行,行数是multiGrid.length(也就是width)
        for(int i = 0; i < multiGrid.length; i ++){ 
            // 第二个循环遍历当前行的所有列,用当前行的长度更安全
            for(int j = 0; j < multiGrid[i].length; j ++){ 
                // 如果想让打印更整齐,可以用System.out.printf("%4d", multiGrid[i][j]); 代替println
                System.out.println(multiGrid[i][j]); 
            } 
        } 
    } 
    public static void main(String[] args) { 
        Scanner keyboard = new Scanner(System.in); 
        System.out.println("Welcome to Multiplication Grid"); 
        System.out.print("Enter a number for width: "); 
        int width = keyboard.nextInt(); 
        System.out.print("Thank you! Now, enter a number for height: "); 
        int height = keyboard.nextInt(); 
        int[][] multiGrid = createMultiplicationArray(width, height); 
        printGrid(multiGrid); 
        keyboard.close(); // 记得关闭Scanner,避免资源泄漏
    } 
}

额外优化建议

如果想让乘法表打印得更整齐(不是每行一个数),可以把System.out.println改成System.out.printf("%4d", multiGrid[i][j]);,然后在每行结束后加一个System.out.println();,这样输出的表格会更美观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 02:52:44