[英]Traverse 2d array for variable size column wise
我有這樣的二維數組
int[][] v = {{1,2,3}, {4,5}, {6,4,3,}, {1}, {7,8,9};
我希望它像這樣打印
1,4,6,1,7,2,5,4,8,3,3,9
我知道我們必須逐列遍歷,但列的大小不固定。 那么我怎樣才能實現上述目標呢?
我已經嘗試了以下方法,但它給出了 IndexArrayOutOfBoundException
for(int i = 0; i < v.length; i++){
for(int j = 0; j< v[i].length; j++) {
System.out.println(v[j][i]);
}
}
如何做到這一點?
這是一個有效的簡單解決方案,如果您需要澄清,請告訴我
public static void test(int[][] arr) {
int i = 0;
boolean found = true;
while(found){
found = false;
for(int j = 0; j < arr.length; j++){
if(arr[j].length-1 >= i){
System.out.println(arr[j][i]);
found = true;
}
}
i++;
}
}
這是一個基於 stream 的解決方案:
IntStream.iterate(0, i -> i + 1)
.mapToObj(i -> IntStream.range(0, v.length)
.flatMap(j -> i < v[j].length ? IntStream.of(v[j][i]) : IntStream.empty())
.boxed().toList())
.takeWhile(l -> !l.isEmpty())
.flatMap(List::stream)
我認為代碼很容易解釋,但如果你有問題,請隨時問他們
public static void printColumns(int[][] array) {
int largest = 0;
for (int[] i:array) {
if (i.length>largest) { // find the largest element in array
largest = i.length;
}
}
for (int i=0;i<largest;i++) {
for (int[] intArray : array) {
if (i < intArray.length) { // check that you won't get an IndexOutOfBounds exception
System.out.print(intArray[i]+",");
}
}
}
System.out.println("\b"); // removes last "," printed
}
輸入
{{1,2,3}, {4,5}, {6,4,3,}, {1}, {7,8,9}}
輸出:
1,4,6,1,7,2,5,4,8,3,3,9
這是我的建議,基於這樣的想法,如果你知道最長數組的長度,一切都會變得更簡單:)
int[][] v = {{1,2,3}, {4,5}, {6,4,3}, {1}, {7,8,9}};
int maxLength = 0;
for(int i = 0; i < v.length; i++){
maxLength = v[i].length > maxLength ? v[i].length : maxLength;
}
for(int i = 0; i < maxLength; i++){
for(int j = 0; j < v.length; j++){
if(i < v[j].length){
System.out.print(v[j][i]+",");
}
}
}
嘗試這個。
public static void main(String[] args) {
int[][] v = {{1, 2, 3}, {4, 5}, {6, 4, 3}, {1}, {7, 8, 9}};
boolean moreColumns = true;
String sep = "";
for (int c = 0, rows = v.length; moreColumns; ++c) {
moreColumns = false;
for (int r = 0; r < rows; ++r) {
if (c < v[r].length) {
System.out.print(sep + v[r][c]);
sep = ", ";
moreColumns = true;
}
}
}
}
output:
1, 4, 6, 1, 7, 2, 5, 4, 8, 3, 3, 9
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.