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
相关产品推荐
相关产品推荐

