返回2d数组中的行数?

时间:2011-05-09 04:44:27

标签: java arrays

我有这个2D阵列:

private boolean[][] landscape;

此景观数组定义了一个带有[rows]和[cols]

的池塘

方法public int getRows()需要返回格局数组中的行数

我只试过return landscape.length;而且没有用。我尝试了更多的事情没有成功:

        int count = 0;
        for (boolean[] i : landscape){
            count += i.length;


        }
        return count;

       int count = 0;

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

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

            }

        }
        return count;

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

7 个答案:

答案 0 :(得分:18)

让我们从一些定义开始:

我们假设一个3 x 4矩形数组有3列4行,用下式表示:

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

获取行数和列数:

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

如果您认为我已经混合了行和列,(精神上)重命名它们。 (没有关于哪个维度代表列并且代表行的通用约定。)

如果你期望得到3或4以外的答案,你需要解释你在说什么。


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

答案 1 :(得分:3)

所以2D数组实际上只是数组的数组。因此,如果我有一个包含5行和4列的2D数组,您可以将其视为包含5个子阵列的数组,每个子阵列有4个点。

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("");
}

输出:

Number of rows: 5
Number of cols: 4
0000
0000
0000
0000
0000

重要的是要注意java被认为是行主要的(行始终排在第一位):Which comes first in a 2D array, rows or columns?这很重要,因为如果先迭代列(第0列:第0行,第1行,第2行,第3,第4行;第1列:第0行,第1行等),您实际上是无效地通过2D数组,因为内存是逐行连续存储的,所以逐列进行意味着您正在跳过段记忆,然后回去,而不是只是连续去;阅读有关汇编程序和编译器的更多信息。

答案 2 :(得分:2)

return landscape[0].length怎么样?您需要确保landscape[0]处的数组元素已经初始化,但听起来确实没问题。

请参阅,因为(我假设)您初始化为landscape[rows][cols],要求landscape.length获取cols的数量 - 它可以从外部运行。你需要去更深。

答案 3 :(得分:1)

让我们考虑一个矩阵:

                  0 1 0
                  1 0 1
                  1 0 0
                  0 0 1

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

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

在java中,2D数组并不完全是行主,而是数组数组。 但是为了回答你的问题并以更简单的方式解释你,我们可以将其视为行主要安排。

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

获取我们需要获取数组变量长度值的行数,它给出了行数。

实质上,

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

我希望,我能够回答你的问题。

答案 4 :(得分:0)

您的代码应该有效。

    int count = 0;

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

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

        }

    }
    return count;

您可以将代码发布到如何填充2D数组吗?

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

    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++;
        }
    }

答案 5 :(得分:0)

Stephen,根据一般惯例,您的代码有轻微错误。根据标准约定,以下内容应该为您提供正确的行和列值:

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

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

答案 6 :(得分:0)

这很简单,只需使用下面的代码即可获取矩阵中的行和列,而无需运行任何循环。

  int rows = M.length;
  int columns = M[0].length;