我已编写代码以螺旋形式打印矩阵。
我对我的遍历是正确的,但是我无法想出矩阵中层数的结束条件。
请参阅下面的代码
当我将层数硬编码为2时,我得到了预期的输出,因为我事先知道了矩阵。如何用while循环替换while循环中的条件,以便它适用于所有矩阵。
public class IterativeSpiral
{
public static void main(String[] args)
{
char[][] a = {
{'a','b','c','d'},
{'l','m','n','e'},
{'k','p','o','f'},
{'j','i','h','g'}
};
fun(a,4,4);
}
static void fun(char[][] a, int rows, int cols)
{
int count = 0;
//this condition in while loop needs to be replaced
while(count < 2)
{
System.out.println("Layer"+count);
for(int i = count;i<cols-count;i++)
System.out.print(a[count][i]);
for(int i = count+1;i<rows-count;i++)
System.out.print(a[i][cols-count-1]);
for(int i = cols-count-2;i>=count;i--)
System.out.print(a[rows-count-1][i]);
for(int i = rows-count-2;i>count;i--)
System.out.print(a[i][count]);
count++;
System.out.println("");
}
}
}
我尝试找到结束条件
答案 0 :(得分:0)
当矩阵比它高时,行数决定了结束条件。当它高于它的宽度时,就是列数。
图层数将是行数或列数的一半,向上舍入。
所以终止条件是
while(count < (Math.min(rows, cols) + 1) / 2)
但是,您还需要在第3次和第4次运行的循环内添加一些额外条件,以防止输出重复元素,因为当列数或列的最小值为奇数时,不会有精确的层数:
if(count != rows-count-1)
{
for(int i = cols-count-2;i>=count;i--)
System.out.print(a[rows-count-1][i]);
}
if(count != cols-count-1)
{
for(int i = rows-count-2;i>count;i--)
System.out.print(a[i][count]);
}
当然你也可以使用其他一些终止条件,但希望这可以回答你的问题,因为你说你不想使用它们。