如何在二维数组中获取用户输入而不指定第二维(即列维度)?

问题描述 投票:0回答:2

我使用 Scanner 类来获取输入,这是代码。

int [] [] arr = new int[3][];
        for (int row = 0; row < arr.length; row++)
        {
            for (int col = 0; col < arr[row].length; col++) {
                arr[row][col] = sc.nextInt();
            }
        }
        for (int row = 0; row < arr.length; row++) {
            System.out.println(Arrays.toString(arr[row]));
        }

1 2 3 4 5 6 7 8 95 52 45 - 提供输入 I 这是我得到的输出

Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "arr[row]" is null at
com.Arrays.TwoDArray.main(TwoDArray.java:26)
java multidimensional-array
2个回答
0
投票

您收到此错误是因为您没有定义数组的第二个维度并且您使用了 arr[row].length

这里有两种方法可以纠正这个问题:

1.

int [] [] arr = new int[3][3];
        for (int row = 0; row < arr.length; row++)
        {
            for (int col = 0; col < arr[row].length; col++) {
                arr[row][col] = sc.nextInt();
            }
        }
        for (int row = 0; row < arr.length; row++) {
            System.out.println(Arrays.toString(arr[row]));
        }
  1. int[][]arr = new int[3][]; for (int 行 = 0; 行 < arr.length; row++) { for (int col = 0; col < 3; col++) { arr[row][col] = sc.nextInt(); } } for (int row = 0; row < arr.length; row++) { System.out.println(Arrays.toString(arr[row])); }

0
投票

这是使用流的一种方法。它假定您在同一行上键入每一行输入。

  • 读入一行数字,用一个或多个空格分隔
  • 在这些空格上拆分该行并将项目转换为 int 并放入数组中。 (过滤掉任何空白条目允许您在该行的任何位置开始输入)。
  • 然后将该数组分配到原始位置。
Scanner sc = new Scanner(System.in);
int [] [] arr = new int[3][];
for (int row = 0; row < arr.length; row++)
{      
    String line = sc.nextLine();
    arr[row] = Arrays.stream(line.split("\\s+")).filter(s->!s.isBlank()).mapToInt(Integer::parseInt).toArray();
}
for (int row = 0; row < arr.length; row++) {
    System.out.println(Arrays.toString(arr[row]));
}

打印

© www.soinside.com 2019 - 2024. All rights reserved.