[英]Return number of rows in 2d array?
我有這個二維數組:
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 個。那么我該怎么做呢?
讓我們從一些定義開始:
讓我們假設一個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 以外的其他答案,則需要解釋您在說什么。
顯然,這只適用於方形或矩形陣列。
所以二維數組實際上只是數組的數組。 因此,如果我有一個 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 被認為是行優先(行總是在前): 在二維數組、行還是列中,哪個先出現? 這很重要,因為如果您先迭代列(第 0 列:第 0 行、第 1 行、第 2 行、第 3 行、第 4 行;第 1 列:第 0 行、第 1 行等),您實際上是在低效地遍歷二維數組,因為內存是逐行連續存儲的,所以逐列存儲意味着你跳過內存段然后返回,而不是連續存儲; 閱讀有關匯編器和編譯器的更多信息。
讓我們考慮一個矩陣:
0 1 0
1 0 1
1 0 0
0 0 1
我們可以將此矩陣表示為 java 中的 4 行 3 列的 2D 數組。
初始化:
int[][] matrix=new int[4][3];
在java中,二維數組並不完全是行主,而是數組的數組。 但是為了回答您的問題並以更簡單的方式向您解釋,我們可以將其視為行優先安排。
為了讓事情更清楚, 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;
您可以將代碼發布到如何填充二維數組嗎?
這是我做的一個項目,它計算二維數組中的行和元素。
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.