java 遍历二维数组

piwo6bdm  于 2023-10-14  发布在  Java
关注(0)|答案(7)|浏览(171)

我有一个“连接四个板”,我用一个2D数组(array[x][y] x=x坐标,y = y坐标)来模拟。我必须使用“System.out.println”,所以我必须遍历这些行。
我需要一个方法来解决这个问题[0,0] [1,0] [2,0] [3,0] [0,1] [1,1] [2,1]等
如果我使用正常程序:

for (int i = 0; i<array.length; i++){
     for (int j = 0; j<array[i].length; j++){
        string += array[i][j];
     } System.out.println(string)

}

它不工作,因为它以这种方式迭代[0,0] [0,1] [0,2] [0,3]等
正常的过程保持在x和递增y,直到列的末尾,但我需要说在y和递增x,直到行的末尾。

hgqdbh6s

hgqdbh6s1#

把它看作是一个数组的数组,这肯定会起作用。

int mat[][] = { {10, 20, 30, 40, 50, 60, 70, 80, 90},
                {15, 25, 35, 45},
                {27, 29, 37, 48},
                {32, 33, 39, 50, 51, 89},
              };

    for(int i=0; i<mat.length; i++) {
        for(int j=0; j<mat[i].length; j++) {
            System.out.println("Values at arr["+i+"]["+j+"] is "+mat[i][j]);
        }
    }
mcdcgff0

mcdcgff02#

只需像这样反转索引的顺序:

for (int j = 0; j<array[0].length; j++){
     for (int i = 0; i<array.length; i++){

因为所有的行都有相同数量的列,所以你可以使用这个条件j < array[0]. numb in first for条件,因为你正在迭代一个矩阵。

db2dz4w8

db2dz4w83#

//This is The easiest I can Imagine . 
 // You need to just change the order of Columns and rows , Yours is printing columns X rows and the solution is printing them rows X columns 
for(int rows=0;rows<array.length;rows++){
    for(int columns=0;columns <array[rows].length;columns++){
        System.out.print(array[rows][columns] + "\t" );}
    System.out.println();}
envsm3lx

envsm3lx4#

只是改变索引。i和j....在循环中,另外,如果你处理字符串,你必须使用concat并将变量初始化为空的Strong,否则你会得到一个异常。

String string="";
for (int i = 0; i<array.length; i++){
    for (int j = 0; j<array[i].length; j++){
        string = string.concat(array[j][i]);
    } 
}
System.out.println(string)
zdwk9cvp

zdwk9cvp5#

这些功能应该起作用。

// First, cache your array dimensions so you don't have to
//  access them during each iteration of your for loops.
int rowLength = array.length,       // array width (# of columns)
    colLength = array[0].length;    // array height (# of rows)

//     This is your function:
// Prints array elements row by row
var rowString = "";
for(int x = 0; x < rowLength; x++){     // x is the column's index
    for(int y = 0; y < colLength; y++){ // y is the row's index
        rowString += array[x][y];
    } System.out.println(rowString)
}

//      This is the one you want:
// Prints array elements column by column
var colString = "";
for(int y = 0; y < colLength; y++){      // y is the row's index
    for(int x = 0; x < rowLength; x++){  // x is the column's index
        colString += array[x][y];
    } System.out.println(colString)
}

在第一个块中,内部循环在移动到下一列之前迭代行中的每个项。
在第二个块(您想要的块)中,内部循环在移动到下一行之前迭代所有列。
tl;dr:Essentially, thefor()loops in both functions are switched. That's it.
我希望这能帮助你理解迭代二维数组背后的逻辑。
此外,无论您有字符串[,]还是字符串[][],

kt06eoxx

kt06eoxx6#

简单的想法:获取最长行的长度,如果有元素,则在每列上打印行的内容。下面的代码可能会有一些错误,因为它是在一个简单的文本编辑器中编码的。

int longestRow = 0;
  for (int i = 0; i < array.length; i++) {
    if (array[i].length > longestRow) {
      longestRow = array[i].length;
    }
  }

  for (int j = 0; j < longestRow; j++) {
    for (int i = 0; i < array.length; i++) {
      if(array[i].length > j) {
        System.out.println(array[i][j]);
      }
    }
  }
kmynzznz

kmynzznz7#

//MREOW
for (int i = 0; i < cards.length; i++) {
    for (int j = 0; j < cards[i].length; j++) {

相关问题