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

可変長の 2 次元配列を出力するには、内側のループ0the 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は 2 次元配列です。
  • したがって、あなたの各要素arr1-D array.
  • は 1次元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 列から最大列までループを再度実行します。さて、あなたは の欠落を持っているのでcolumns、今度は の別の欠落が必要です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 に答える