我有这个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 行等),您实际上是在低效地遍历二维数组,因为内存是逐行连续存储的,所以逐列存储意味着你跳过内存段然后返回,而不是连续存储;阅读有关汇编器和编译器的更多信息。
怎么样return landscape[0].length?您希望确保数组元素landscape[0]已经初始化,但听起来这样就可以了。
看,因为(我假设)你正在初始化为landscape[rows][cols],所以要求landscape.length得到你的数量cols- 它从外到内工作。你需要更深入。