逐列打印不规则阵列

时间:2014-04-23 00:39:47

标签: java arrays

给定一个具有不同长度行的整数数组,是否可以打印整个二维数组但是逐列进行?我知道如何逐行进行,但我正在努力解决这个问题。

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&lt; longestRowLength不起作用,因为如果它的长度不是最长的那么它甚至不打印任何数字。我怎么能实现这个?

编辑:

好的我已将该行更改为:

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

现在它可以工作,但它会将列打印为行。无论如何都要让它逐列打印,但要像打包那样打印吗? (P.S.是的,if语句的第一个条件是不必要的)。

1 个答案:

答案 0 :(得分:0)

将上一个循环替换为:

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;
        }

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