给定一个具有不同长度行的整数数组,是否可以打印整个二维数组但是逐列进行?我知道如何逐行进行,但我正在努力解决这个问题。
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语句的第一个条件是不必要的)。
答案 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;
}
为太短的数组留出空间。这样就可以打印转置的“锯齿状”矩阵。