2

我在打印列时遇到问题。当代码达到“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();
    }
  }
}

我应该怎么做才能继续阅读该专栏?

4

2 回答 2

3

要打印可变长度的二维数组,您的内部循环运行 from0the current rowlength :-

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 loop正在从 运行col = 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 到最大列。现在,既然你有一个 lop for columns,现在你需要另一个 for rows。这将是你的内在循环。

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

于 2012-11-14T14:04:22.413 回答
0

代替:

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

和:

for( int row=0; row < uneven[col].length; row++ ) 
于 2012-11-14T14:05:43.657 回答