返回二维数组中的行数



我有这个 2d 数组:

private boolean[][] landscape;

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

该方法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 个。 那么我该怎么做呢?

让我们从一些定义开始:

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

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

获取行数和列数:

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

如果您认为我的术语中的行和列方式错误,请在心理上重命名它们。 对于 Java 代码中哪个维度表示列,哪个维度表示行,没有通用约定。

如果您期待 3 或 4 以外的答案,则需要解释您在说什么。

<小时 />

显然,这仅适用于方形或矩形数组。

所以 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被认为是行主要的(行总是排在第一位):在2D数组中,行还是列中哪个先出现?这很重要,因为如果您先迭代列(第 0 列:第 0 行、第 1 行、第 2 行、第 3 行、第 4 行;第 1 列:第 0 行、第 1 行等),您实际上正在低效地浏览 2D 数组,因为内存是逐行连续存储的,因此逐列执行意味着您跳过内存段,然后返回, 而不是连续进行;有关详细信息,请阅读汇编程序和编译器。

让我们考虑一个矩阵:

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

我们可以在 java 中将此矩阵表示为具有 4 行和 3 列的 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

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

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

看,由于(我假设)您正在初始化为landscape[rows][cols],要求landscape.length会让您获得cols的数量 - 它从外到内工作。你需要更深入。

你的代码应该可以工作了。

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

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

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

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

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

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

最新更新