java 螺旋打印_java实现:二维数组螺旋打印输出

本文介绍了如何使用Java实现二维数组的螺旋打印。通过分层并依次处理上、右、下、左四个方向,实现螺旋图案的绘制。在代码中,通过判断当前层的结束条件避免了异常,并给出了完整的代码实现。
摘要由CSDN通过智能技术生成

568a722ca6234d02d5bab4a46104ee33.png                                           

40e6a4d132b8fdd35daa8c2101a03a57.png

朋友出的一道算法题,大概意思是:输入任意一个数n,用二维数组打印出螺旋图案(如上左图,输入5),

我自己的主要思想是分层,由外向内,一圈为一层,然后每层又分为上右下左(top-right-bottom-left)四个方向,每个方向单独画。

过程中遇到的问题:

1.啥时候结束循环?

当(sum-1)=(n*n)时。

2.结束循环的条件判断需要在哪儿写?

刚开始我就在循环体最后面写的,然后就一直抛异常了(哎,心累),后来我就在每个方向画完后,就写了个结束循环的判断。

来直接上代码了(简单实现了下):

public static void main(String[] args) {

int n = 5;

int a[][] = luoxuan(n);

for (int i = 0; i < n; i++) {

for (int j = 0; j < n; j++) {

System.out.print(" " + a[i][j] + " ");

}

System.out.println("\n");

}

}

/**

* 螺旋展示

* @param n 任意数,负数默认为1.

* @return

*/

private static int[][] luoxuan(int n) {

if (n <= 0) {

n = 1;

}

int a[][] = new int[n][n];

int top = 0, bottom = n - 1;//上下

int left = 0, right = n - 1;//左右

int i = top, j = left;

int sum = 1;

while (true) {

//上

while (j != right + 1) {

a[i][j] = sum;

sum++;

j++;

}

j--;

if ((sum - 1) == (n * n)) {

break;//退出条件

}

top++;

i = top;

//右

while (i != bottom + 1) {

a[i][j] = sum;

sum++;

i++;

}

i--;

if ((sum - 1) == (n * n)) {

break;

}

right--;

j = right;

//下

while (j != left - 1) {

a[i][j] = sum;

sum++;

j--;

}

j++;

if ((sum - 1) == (n * n)) {

break;

}

bottom--;

i = bottom;

//左

while (i != top - 1) {

a[i][j] = sum;

sum++;

i--;

}

i++;

if ((sum - 1) == (n * n)) {

break;

}

left++;

j = left;

}

System.out.println("n="+n+",i=" + i + ",j=" + j + ",sum=" + sum);

return a;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值