印刷专栏

时间:2012-11-14 14:01:28

标签: java multidimensional-array

我在打印列时遇到问题。当代码达到“100”时,它会停止读取它下方的内容,因为它是空的:

public class Column{

  public static void main( String[] arg )
  {

    int[][] uneven = 
        { { 1, 3, 100, 6, 7, 8, 9, 10},
          { 0, 2},
          { 0, 2, 4, 5},
          { 0, 2, 4, 6, 7},
          { 0, 1, 4, 5 },
          { 0, 1, 2, 3, 4, 5, 6 }};

    for ( int col=0; col < uneven.length; col++ )
    {
      System.out.print("Col " + col + ": ");
      for( int row=0; row < uneven.length; row++ ) 
        System.out.print( uneven[row][col] + " ");
      System.out.println();
    }
  }
}

我应该怎么做以便继续阅读专栏?

2 个答案:

答案 0 :(得分:3)

要打印可变长度的二维数组,内部循环从0the current row长度: -

for (int i = 0; i < arr.length; i++) {

    for (int j = 0; j < arr[i].length; j++) {  // Closely see inner loop

        System.out.println(arr[i][j]);
    }
}

arr[i]是当前行。 arr[i].length给出了该行中的列数。

您可以这样推断: -

  • arr是一个二维数组。
  • 因此,arr的每个元素都是1-D array
  • 因此,arr[i]是一维数组。代表每一行。
  • 要获取每行中的列数,请执行arr[i].length

现在,您可以在问题中应用相同的内容。


实际上,您的for loop运行错误。您的outer loopcol = 0 to col < uneven.length开始运行,但应该从以下位置开始运行: - row = 0 to row < uneven.length

所以,你的for循环应该是: -

for ( int row=0; row < uneven.length; row++ )
{
   System.out.print("Row " + row + ": ");

   for( int col=0; col < uneven[row].length; col++ ) { 
     System.out.print( uneven[row][col] + " ");
   }
   System.out.println();
}

更新: -

好的,我先把你的问题弄错了。如果要打印column wise,可以使用以下代码: -

int[][] uneven = 
    { { 1, 3, 100, 6, 7, 8, 9, 10},
      { 0, 2},
      { 0, 2, 4, 5},
      { 0, 2, 4, 6, 7},
      { 0, 1, 4, 5 },
      { 0, 1, 2, 3, 4, 5, 6 }};

    int max = -1;
    for ( int row = 0; row < uneven.length; row++ ) {
        if (uneven[row].length > max) {
            max = uneven[row].length;
        }
    }
    System.out.println(max);
    for (int i = 0; i < max; i++) {
        for (int j = 0; j < uneven.length; j++) {
            if (uneven[j].length <= i) {
                continue;
            }
            System.out.print(uneven[j][i] + " ");
        }
        System.out.println();
    }

首先,您需要在每行的所有列数中找到最大值。

然后再次运行循环,从0到最大列。现在,既然你有columns的lop,现在你需要另一个rows。那将是你的内心循环。

现在,在内部循环中,您不能只在(j, i)索引处打印数组元素,因为当前行可能没有max列数。因此,您需要设置if-condition来检查。

答案 1 :(得分:0)

替换:

for( int row=0; row < uneven.length; row++ ) 

使用:

for( int row=0; row < uneven[col].length; row++ )