当前位置: 首页 > 知识库问答 >
问题:

不知道列大小的标准输入的二维数组

姜兴业
2023-03-14

如何从我知道行大小但不知道列大小的标准输入中打印二维数组

标准输入的第一行是行大小,接下来的几行是行数,每个列元素的输入用空格分隔。例如

3
1 2 3
3 4 5
6 9 3

这就是我正在用我的代码尝试的

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int rows = sc.nextInt(); // Number of rows
        int[][] arr = new int[rows][];
        for(int i = 0; i < rows; i++){

        }
}

共有3个答案

程鸿煊
2023-03-14

忽略第一行。

List<String[]> lines = new ArrayList<>();
sc.nextLine(); //skip line 1
while (sc.hasNextLine()) 
    lines.add(sc.nextLine().split(" "));

要打印:

lines.stream().map(Arrays::toString).forEach(System.out::println);
江志业
2023-03-14
String line = sc.nextLine();
String values[] = line.split(" ");
// Now each item of values contains an item of the line, convert it to the type you want and store in your two dimensional array, line by line
// the row count will be values.length 
孟建木
2023-03-14

如果您想要列值,那么您需要拆分每行。拆分行时,您将知道列数。例如:

public static void main(String[] args) {
    String input = "3\n" +
            "1 2 3\n" +
            "3 4 5\n" +
            "6 9 3\n";
    Scanner scanner = new Scanner(input);

    int rows = scanner.nextInt();
    scanner.nextLine();

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

    for (int i = 0; i < rows; ++i) {
        String line = scanner.nextLine();
        arr[i] = lineToIntArray(line);
    }
}

private int[] lineToIntArray(String line) {
    String[] cols = line.split(" ");
    int[] ints = new int[cols.length];
    for (int i = 0; i < cols.length; ++i) {
        ints[i] = Integer.parseInt(cols[i]);
    }
    return ints;
}

或使用Java 8:

private int[] lineToIntArray(String line) {
    return Arrays.asList(line.split(" ")).stream().mapToInt(Integer::parseInt).toArray();
}
 类似资料:
  • 问题内容: 有没有一种方法可以在Java中创建数组,而无需先定义或要求其长度? 再次,用户输入一些数字作为参数,然后程序创建了一个包含这么多参数的数组。 问题答案: 有没有一种方法可以在Java中创建数组,而无需先定义或要求其长度?再次,用户输入一些数字作为参数,然后程序创建了一个包含这么多参数的数组。 目前尚不清楚您所处的状态。如果您知道执行时的数组长度而不是编译时的数组长度,那就可以了: 您可

  • 嗨,我是一个非常新的编码,并试图弄清楚如何创建一个二维数组。它要求用户输入行和列大小,然后用随机数填充那些选定的行和列大小。经过几天的努力,我决定来这里寻求帮助。这是我到目前为止所拥有的,它遍布我所知道的所有地方。

  • 问题内容: 好的,所以我有一个二维数组z [50][50],因此z的大小是50*50,但是如果我说z.length,我只能得到50。如何获得2D数组的实际大小? 问题答案: 在Java中,二维数组实际上是长度可能不同的数组的数组(不能保证在二维数组中第二维数组的长度都相同) 您可以将任何第二维数组的长度作为where 。 如果将二维数组视为矩阵,则可以简单地获取和,但是请注意,您可能会假设第二维的

  • 问题内容: 我正在向stdin写入大量数据。 我如何确保它不会阻塞? 我读了一个大字符串并将其写入后,似乎无法解决。 我有大量的文件集,这些文件将被顺序写入stdin(> 1k个文件) 所以发生的事情是我正在运行一个循环 它以某种方式挂在文件号上。400.该文件是带有长字符串的大文件。 我确实怀疑这是一个阻碍性问题。 仅当我从0迭代到1000时才会发生这种情况。但是,如果我要从文件400开始,则不

  • 如何动态调整列的大小以支持可能的不规则数组? 上面的代码会分配每个col的长度吗? 事先谢谢你的帮助。

  • 我有一个实体类,我有一个值作为薪水。工资的数据类型是bigdecimal。现在我想对这个实体执行一个查询,其中有两个值,从salary和toSalary。我希望所有的员工都有薪水 薪水以Bigdecaml表示,fromSalary和toSalary以Double表示。 我尝试了2种方法。 标准在哪里(薪水)。gte(新的BigDecimal(fromSalary))。lte(新的大十进制(toSa