关于Java:在2D数组中返回行数?

Return number of rows in 2d array?

我有这个二维数组:

1
private boolean[][] landscape;

这个景观数组定义了一个池塘及其[行]和[列]

方法public int getRows()需要返回景观数组中的行数。

我刚试过return landscape.length;,但没用。我还尝试了几件没有成功的事情:

1
2
3
4
5
6
7
        int count = 0;
        for (boolean[] i : landscape){
            count += i.length;


        }
        return count;

1
2
3
4
5
6
7
8
9
10
11
       int count = 0;

        for (int i = 0; i < landscape.length; i++) {

                if (landscape[i] != null){
                    count ++;

            }

        }
        return count;

行和列的数量取决于用户选择的内容。最少有5个。那么我该怎么做呢?


让我们从一些定义开始:

假设一个3 x 4矩形阵列有3列4行,用以下公式表示:

1
boolean landscape[][] = new boolean[3][4];

要获取行数和列数:

1
2
int nosRows = landscape[0].length;  // 4
int nosCols = landscape.length;     // 3

如果你认为我的行和列混淆了,(在精神上)重命名它们。(对于表示列和行的维度,没有通用的约定。)

如果你期望的答案不是3或4,你需要解释你在说什么。

显然,这只适用于方形和矩形阵列。


所以二维数组实际上只是数组的数组。所以如果我有一个有5行4列的二维数组,你可以把它看作一个包含5个子数组的数组,每个子数组有4个点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
boolean landscape[][] = new boolean[5][4];

int numRows = landscape.length;
int numCols = landscape[0].length;

System.out.println("Number of rows:" + numRows);
System.out.println("Number of cols:" + numCols);

for (int i = 0; i < numRows; i++) {
    for (int j = 0; j < numCols; j++) {
        System.out.print(landscape[i][j]);
    }
    System.out.println("");
}

输出:

1
2
3
4
5
6
7
Number of rows: 5
Number of cols: 4
0000
0000
0000
0000
0000

值得注意的是,Java被认为是行主要(行总是第一个):在2D数组、行或列中最先出现的是什么?这一点很重要,因为如果您首先迭代列(列0:行0、行1、行2、行3、行4;列1:行0、行1等),实际上您会效率低下地遍历二维数组,因为内存是逐行连续存储的,因此逐列执行意味着您将跳过内存段,然后返回,而不是连续进行的;阅读关于汇编程序和编译器的更多信息。


埃多克斯1〔0〕怎么样?您需要确保landscape[0]处的数组元素已经初始化,但听起来没问题。

你看,因为(我假设)你是在初始化为landscape[rows][cols],要求landscape.length会得到cols的号码,它从外面起作用。你需要更深入。


让我们考虑一个矩阵:

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

我们可以将该矩阵表示为具有4行和3列的Java中的2D数组。
初始化:

1
int[][] matrix=new int[4][3];

在爪哇中,2D阵列不完全是行主要的,而是数组的数组。但要回答你的问题并用一种更简单的方式解释你,我们可以把这看作是一个排的主要安排。

为了使事情更清楚,matrix[1]指向索引1处的一行。matrix[1]实际上是一个数组。其长度等于此矩阵中的列数。所以,matrix[1].length会给出列的数目。在这里,对于这个示例,所使用的索引在不超出界限之前是不相关的。我们也可以使用0作为索引。

为了得到行数,我们需要得到数组变量的长度值,该值给出了行数。

本质上,

1
2
int row = matrix.length;    //4 for above example
int col = matrix[0].length; //3 for above example

希望我能回答你的问题。


斯蒂芬,根据一般惯例,你的代码有一点错误。根据标准惯例,下面应该给出行和列的正确值:

1
2
int rows = matrix.length;
int cols = matrix[0].length;

另外,这假定您已经填充了数组,并且正在检查末尾的行和列的数量。


您的代码应该有效。

1
2
3
4
5
6
7
8
9
10
11
    int count = 0;

    for (int i = 0; i < landscape.length; i++) {

            if (landscape[i] != null){
                count ++;

        }

    }
    return count;

你能把你的代码发布到如何填充你的二维数组中吗?

这是我做的一个项目,它计算了二维数组中的行和元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    double[][] array = {{1,2,3,3,3,3},{3,4,5,8,9},{8,9,1}};

    // counter to count the amount of elements in the 2d array
    double elements = 0;  // 14 elements in array above 1,2,3,3,3,3,3,4,5,8,9,8,9,1

    // counter to count the amount of rows.
    double rows = 0;   // 3 rows in the array above. {}{}{}

    // loop through rows
    for (int i = 0; i < array.length; i++) {
        rows++;
        // loop through columns
        for (int j = 0; j < array[i].length; j++) {
            elements++;
        }
    }