返回2d数组中的行数?

use*_*647 3 java arrays

我有这个2d数组:

private boolean[][] landscape;
Run Code Online (Sandbox Code Playgroud)

这个景观数组定义了一个有[行]和[cols]的池塘

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

我试过了return landscape.length;,但没有用.结合我尝试的更多事情没有成功:

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


        }
        return count;
Run Code Online (Sandbox Code Playgroud)

       int count = 0;

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

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

            }

        }
        return count;
Run Code Online (Sandbox Code Playgroud)

行和列的数量取决于用户选择的内容.至少有5.所以我该怎么做?

Ste*_*n C 19

让我们从一些定义开始:

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

boolean landscape[][] = new boolean[3][4];
Run Code Online (Sandbox Code Playgroud)

要获取行数和列数:

int nosRows = landscape[0].length;  // 4
int nosCols = landscape.length;     // 3
Run Code Online (Sandbox Code Playgroud)

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

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


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


小智 5

所以二维数组实际上只是数组的数组。因此,如果我有一个 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("");
}
Run Code Online (Sandbox Code Playgroud)

输出:

Number of rows: 5
Number of cols: 4
0000
0000
0000
0000
0000
Run Code Online (Sandbox Code Playgroud)

需要注意的是,java 被认为是行优先(行总是在前):在二维数组、行还是列中,哪个先出现?这很重要,因为如果您先迭代列(第 0 列:第 0 行、第 1 行、第 2 行、第 3 行、第 4 行;第 1 列:第 0 行、第 1 行等),您实际上是在低效地遍历二维数组,因为内存是逐行连续存储的,所以逐列存储意味着你跳过内存段然后返回,而不是连续存储;阅读有关汇编器和编译器的更多信息。


Dou*_*oug 2

怎么样return landscape[0].length?您希望确保数组元素landscape[0]已经初始化,但听起来这样就可以了。

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