【顺时针打印矩阵】

 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:               
 1   2   3   4   5   
 16  17  18  19  6   
 15  24  25  20  7   
 14  23  22  21  8   

 13  12  11  10  9 


从昨天下午开始做题,一下午做出来9道,然后就剩这一个题。今天又做了一下午,终于把这最后一道做出来了

 * 思路是这样的:
 * 把打印结果看成大圈套小圈
 * n=2打印1圈,n=3打印2圈,n=4打印两圈,n=5打印3圈,一共(n+1)/2圈------------->这是最外层的for循环,从0到(n+1)/2


 * 一圈分四次打印:
 * 第一次从左往右打印最上面一排,第二次从上往下打印最右边一排去掉最上面一个和最下面一个
 * 第三次从右往左打印最下面一排,第四次从下往上打印最左边一排,去掉最下面一个和最上面一个
 * 打印完一圈再往里打印第二圈知道打印完为止


 * 矩阵分两种:
 *一种中间有一个数
 *一种中间是一个圈
 * 如果矩阵之间只有一个数,比如5的矩阵,它的停止条件是num==n*n+1
 * 矩阵中间是一个圈,停止条件看m


package com.itheima.test9;

public class Test9 {

	public static void main(String[] args) {
		int[][] a=myMethod(5);
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a.length;j++){
				 switch ((a[i][j]+"").length()) {
				case 1:
					System.out.print(a[i][j]+"   ");
					break;
				case 2:
					System.out.print(a[i][j]+"  ");
					break;
				case 3:
					System.out.print(a[i][j]+" ");
					break;

				}
			}
			System.out.println();
		}
	}
	public static int[][] myMethod(int n){
		//初始化用来存放n阶矩阵的数组
		int[][] a=new int[n][n];
		//定义计数器从1开始
		int num=1;
		
		//这个m是第几个圈的意思
	mark:	for(int m=0;m<(n+1)/2;m++){
			
			//从左往右打印最上面一排
			for(int i=m;i<=n-1-m;i++){
				a[m][i]=num++;
				if(num==n*n+1)
					break mark;
			}
			
			//从上往下打印最右边一排去掉最上面一个和最下面一个
			for(int j=1+m;j<=n-2-m;j++){
				a[j][n-1-m]=num++;
			}
			
			//右往左打印最下面一排
			for(int k=n-1-m;k>=m;k--){
				a[n-1-m][k]=num++;
			}
			
			//从下往上打印最左边一排,去掉最下面一个和最上面一个
			for(int l=n-2-m;l>=1+m;l--){
				a[l][m]=num++;
			}
		}
		
		return a;
	}
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值