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

Java中如何接收用户输入的列数可变的二维数组?

解决Java可变列二维数组输入的空指针问题

你的代码报错的核心原因是未初始化二维数组的子数组:当你执行int[][] arr = new int[rows][];时,只是创建了能容纳rows个一维数组的容器,但每个一维数组(也就是每一行)此时都是null,直接通过arr[r][c]赋值会触发NullPointerException。

修正后的代码

import java.util.Arrays;
import java.util.Scanner;

public class VariableColumn2DArray {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("enter no. of rows: ");
        int rows = sc.nextInt();

        int[][] arr = new int[rows][];

        for (int r = 0; r < arr.length; r++) {
            System.out.print("Enter no. of elements in array " + r + ": ");
            int col = sc.nextInt();
            
            // 关键步骤:初始化当前行的子数组,分配对应长度的内存
            arr[r] = new int[col];

            for (int c = 0; c < col; c++) {
                System.out.print("Enter element " + c + ": ");
                arr[r][c] = sc.nextInt();
            }
        }

        // 打印结果
        for (int[] x : arr) {
            System.out.println(Arrays.toString(x));
        }
        
        sc.close();
    }
}

关键修正说明

  • 在获取当前行的列数col后,必须先执行arr[r] = new int[col];,为当前行的一维数组分配内存空间,之后才能对arr[r][c]进行赋值操作。
  • 固定列数的代码能正常运行,是因为初始化时直接为所有行分配了相同长度的子数组:int[][] arr = new int[rows][col];,每个子数组都已被初始化,不存在空指针问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:27:18