打印n*n矩阵的螺旋方形和回字形

9: 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印
 * 1    2    3    4
 * 12  13  14  5
 * 11  16  15  6
 * 10   9   8    7

黑马的入学测试题第九题,卡住了,黑马的基础测试题也是第九题卡住我,后来花了将近3小时,搞懂把题做出来

当时那是一道关于Date日期格式化的题,正好前一天一个同学在做图书管理系统的时候给我提过,

用Date做输入日期的格式化,我当时想到这个没怎么懂,就不用,也没多想什么时候去弄懂这个,先放着吧,反正项目也完成了

结果第二天去做基础题,就碰到Date日期格式化的题,在那时我就有一个很强烈的想法:以后绝不得过且过,做程序员遇到不懂就到立刻解决,立刻解决不了也要记录下来,列入日程表,提醒自己

这其实就是告诉我们,要把每一个知识点都要弄清楚,不要偷懒,否则,你今天放过了一个点,那么这个点日后肯定会让你付出代价

技术学得明白不明白,人家几个问题就把你的深浅问出来了,只要问一些具体的技术点,就很容易看出你是真懂还是假懂,很容看出你的技术深度和实力,所以,技术是来不得半点虚假的,必须扎扎实实

曾经以为java基础也就这样子了,数组很简单,但是今天这个第九题,有点伤心,被数组虐了

三点半开始做这道题,想了一个半小时,没什么特别的头绪,不想依靠度娘,决定出去吃个饭,吹吹风,晚上回来把这题给攻克

结果晚上还是没有头绪,苦思冥想了一会,决定还是求助度娘...

这是网上的一个源码

public class Rotating {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Rotating x = new Rotating(4);
		x.output();

	}

	int width = 4;// 只能是偶数
	Integer[][] Zone;

	Rotating(int p) {
		this.width = p % 2 == 1 ? p - 1 : p;
		this.Zone = new Integer[this.width][this.width];
		this.init(0, 1);
	}

	private void init(int roll, int start) {
		int wid = this.width - 2 * roll;
		System.out.println("kaishi start=" + start + " wid=" + wid);
		if (wid == 0)
			return;
		for (int i = 0; i < wid - 1; i++) {
			this.Zone[roll][i + roll] = start;
			System.out.println("start=" + start);
			start++;
		}
		for (int i = 0; i < wid - 1; i++) {
			this.Zone[i + roll][this.width - 1 - roll] = start;
			System.out.println("start=" + start);
			start++;
		}
		for (int i = 0; i < wid - 1; i++) {
			this.Zone[this.width - 1 - roll][this.width - 1 - roll - i] = start;
			System.out.println("start=" + start);
			start++;
		}
		for (int i = 0; i < wid - 1; i++) {
			this.Zone[this.width - 1 - roll - i][roll] = start;
			System.out.println("start=" + start);
			start++;
		}
		init(++roll, start);
	}

	void output() {
		for (int i = 0; i < this.width; i++) {
			for (int j = 0; j < this.width; j++) {
				System.out.print(this.Zone[i][j]+"\t");
			}
			System.out.println();
		}
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值