将输入读入int 2D数组,每行具有不同数量的列

时间:2017-02-02 07:35:48

标签: java arrays multidimensional-array java.util.scanner

所以我们只进行了一次小型的实践考试,要求我们以下列格式阅读输入作为非图形问题的规则。实际的算法并不难做到,但我和我的伙伴都没有想到如何开始甚至扫描这些输入。

4 4

1 1
1 2 3
1
1

0
2
1 1
2 2

*actual 4x4 grid here*

前两个整数表示行数(4)和列数。 (4)因此接下来的四行表示每行的规则(第2行为1 2 3),接下来的四行表示每列的规则(第2列为2 2),依此类推。

在一个学期做C之后,我们只处理了每行具有相同列数的数组,而这个Java模块已经过了四个星期,并没有教会我们处理这类问题。

使用nextInt()和double for循环来扫描一个数组本来很容易,但是如果没有零,那么我们都不能用这个来运行。

1 1 0
1 2 3
1 0 0 
1 0 0

考试结束了,但我真的很生气,不知道如何解决这个问题。非常感谢你们的一些见解。

1 个答案:

答案 0 :(得分:1)

在Java中,您可以拥有不同长度的多维数组。

试试这个:

int rows = 4; // read
int cols = 4; // read

int[][] arr = new int[rows][]; // notice how we do not tell the cols here
for(int i=0,i<arr.length;i++){
    // read line or somehow get the numbers of the line into an array
    String line = ...
    String[] splitLine = line.split(" ");
    int[] rowArr = new int[splitLine.length];
    for(int x=0;x<splitLine.length;x++){
        // assume no NumberFormatException
        rowArr[x] = Integer.parseInt(splitLine[x]);
    }
    arr[i] = rowArr;
}

然后你的数组有4行,但每行只需要多少列:

{{1,1},{1,2,3},{1},{1}}

这很有效,因为在Java中,多维数组只是对数组的引用数组。