遍历二维数组

Posted

技术标签:

【中文标题】遍历二维数组【英文标题】:Iterate through 2 dimensional array 【发布时间】:2014-11-06 01:58:14 【问题描述】:

我有一个“连接四块板”,我用二维数组(数组 [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 直到列的末尾,但我需要说 in y 并递增 x 直到行的末尾。

【问题讨论】:

行可以有不同的长度吗? 然后使用大小为y*x的数组,这样会更合乎逻辑... 使用数组[j][i]. 【参考方案1】:

将其视为数组数组,这肯定会起作用。

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]);
        
    

【讨论】:

【参考方案2】:

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

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

因为所有行都有相同数量的列,所以你可以首先使用这个条件 j

【讨论】:

because all rows has same amount of columns 这可能不是真的。如果他使用new int[][] 1,2,3,4,5;怎么办?【参考方案3】:
 //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();

【讨论】:

【参考方案4】:

只需更改索引。 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)

【讨论】:

【参考方案5】:

这些功能应该可以工作。

// 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: 本质上,两个函数中的 for() 循环都被切换了。就是这样。 我希望这可以帮助您理解迭代二维数组背后的逻辑。 此外,无论您有 string[,] 还是 string[][]

,这都有效

【讨论】:

【参考方案6】:

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

  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]);
      
    
  

【讨论】:

以上是关于遍历二维数组的主要内容,如果未能解决你的问题,请参考以下文章

怎么用一个循环遍历二维数组?

C 语言二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )

php如何将二维数组添加到数据库中,如何遍历

C语言,怎么利用一个循环遍历一个二维数组呀?急!!!

C语言 二维数组遍历

for循环二维数组的取值方式?