[英]How do I calculate the column length of a ragged 2d array?
我想計算二維數組中行和列的長度。 我知道如何做行部分但是我不知道如何在這個數組中找到列的長度。
public class array2D {
public static void main(String args[]) {
int maxNumberOfColumns = 8;
Integer[][] j = {
{2, 4, 8, 5, 1, 3, 7, 2},
{6, 7, 4, 8, 2},
{2, 3, 5, 9, 7, 1}};
for (int row = 0; row < j.length; row++) {
for (int col = 0; col < j[row].length; col++) {
System.out.print(j[row][col] + " ");
}
System.out.println();
}
System.out.println();
System.out.println("------------");
System.out.println();
for (int row = 0; row < j.length; row++) {
System.out.println("row "+row+" has "+j[row].length+" elements");
}
System.out.println();
for (int col = 0; col < maxNumberOfColumns; col++) {
//code I don't know
}
}
}
您可以將最后一個 for 循環更改為以下以打印每列的計數。 我在這里使用一個內部循環來計算元素的數量
for (int col = 0; col < maxNumberOfColumns; col++) {
int count = 0;
for (int i = 0; i < j.length; i++) {
if (j[i].length > col) {
count++;
}
}
System.out.println("Column " + (col + 1) + " has " + count + " elements");
}
另一種解決方案是計算第一個循環中的最小列數,使用
minNumberOfColumns = length < minNumberOfColumns ? length : minNumberOfColumns;
然后將最后一個循環更改為
System.out.println("Column 1 to " + minNumberOfColumns + " has " + j.length + " elements");
for (int col = minNumberOfColumns; col < maxNumberOfColumns; col++) {
int count = 0;
for (int i = 0; i < j.length; i++) {
if (j[i].length > col) {
count++;
}
}
System.out.println("Column " + (col + 1) + " has " + count + " elements");
}
您不需要maxNumberOfColumns
變量。 相反,只要元素存在,您就可以計算元素,否則為0
:
Integer[][] arr = {
{2, 4, 8, 5, 1, 3, 7, 2},
{6, 7, 4, 8, 2},
{2, 3, 5, 9, 7, 1}};
// count of elements in the columns
int[] count = Arrays.stream(arr)
.filter(Objects::nonNull)
// for each row take an array
// of the same length, filled with '1'
.map(row -> IntStream
.range(0, row.length)
.map(i -> 1)
.toArray())
// summing elements in rows, if any, or '0' otherwise
.reduce((row1, row2) -> IntStream
.range(0, Math.max(row1.length, row2.length))
.map(i -> (i < row1.length ? row1[i] : 0)
+ (i < row2.length ? row2[i] : 0))
.toArray())
.orElse(null);
System.out.println(Arrays.toString(count));
// [3, 3, 3, 3, 3, 2, 1, 1]
另請參閱:首先按列填充鋸齒狀二維數組
此代碼將解決您的問題:
int maxNumberOfColumns = 8;
Integer[][] j = {
{2, 4, 8, 5, 1, 3, 7, 2},
{6, 7, 4, 8, 2},
{2, 3, 5, 9, 7, 1}};
for (int row = 0; row < j.length; row++) {
for (int col = 0; col < j[row].length; col++) {
System.out.print(j[row][col] + " ");
}
System.out.println();
}
System.out.println();
System.out.println("------------");
System.out.println();
int max = 0;
for (int row = 0; row < j.length; row++) {
System.out.println("row " + row + " has " + j[row].length + " elements");
if (j[row].length > max) {
max = j[row].length;
}
}
for (int k = 0; k < max; k++) {
int count = 0;
for (int row = 0; row < j.length; row++) {
try {
if (j[row][k] != null) {
count = count + 1;
}
} catch (ArrayIndexOutOfBoundsException e) {
continue;
}
}
System.out.println("Column " + k + " has " + count + " elements");
}
System.out.println();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.