【问题标题】:Printing ragged array column by column逐列打印参差不齐的数组
【发布时间】:2014-04-23 00:39:46
【问题描述】:

给定一个具有不同长度行的整数数组,是否可以逐列打印整个二维数组?我了解如何逐行执行此操作,但我正在为此苦苦挣扎。

int[][] a = new int[5][];

a[0] = new int[4];
a[1] = new int[2];
a[2] = new int[5];
a[3] = new int[3];
a[4] = new int[1];

int longestRowLength = a[0].length;
for(i = 1; i < a.length; i++)
{
    if(a[i].length > longestRowLength)
        longestRowLength = a[i].length;
}

for(i = 0; i < a.length; i++)
{
    for(j = 0; j < a[i].length; j++)
    {
        a[i][j] = rand.nextInt(10);
        System.out.print(a[i][j]);
    }
    System.out.println();
}

for(j = 0; j < longestRowLength; j++)
{
    for(i = 0; i < a.length; i++)
    {
        if(a[i].length < longestRowLength)
            continue;
        System.out.print(a[i][j]);
    }
}
}

我已经这样做了,但问题是如何识别我们超出了其中一个数组的范围。我的 if(a[i].length

编辑:

好的,我已将该行更改为:

        if(longestRowLength - a[i].length > 0 && (j+1) > a[i].length)
            continue;
        System.out.print(a[i][j]);

现在它可以工作了,但是它将列打印为行。有没有办法让它逐列打印,但让它像行一样打印? (PS 是的,if 语句的第一个条件是不必要的)。

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    将最后一个循环替换为:

    for(j = 0; j < longestRowLength; j++)
    {
        for(i = 0; i < a.length; i++)
        {
            if(a[i].length <= j)
                continue;
            System.out.print(a[i][j]);
        }
        System.out.println();
    }
    

    一一打印列。

    代替:

            if(a[i].length <= j)
                continue;
    

    你可以这样做:

            if(a[i].length <= j) {
                System.out.print(' ');
                continue;
            }
    

    为太短的数组留出空间。这样您就可以打印转置的“锯齿状”矩阵。

    【讨论】:

      猜你喜欢
      • 2013-08-18
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      相关资源
      最近更新 更多