A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© blueblueblue 中级黑马   /  2016-9-20 09:21  /  1085 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[Java] 纯文本查看 复制代码
package com.itheima;
/**
 * 8、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
 * 1	2	3	4
 * 12	13	14	5
 * 11	16	15	6
 * 10	9	8	7
 * @author admin
 *
 */
public class Test08 {
	public static void main(String[] args) {
		
		//确定二维数组的长度
		int size = 6;
		
		//调用initialize方法对各个变量初始化
		initialize(size);
    }

	//initialize方法
	private static void initialize(int size) {
		
		//根据传入的长度创建二维数组
		int[][] arr = new int[size][size];
		
		//创建计数器
		int count = 1;
		
		//定义圈数(方阵最外圈是第一圈)
		int circle = 1;
		
		//调用start方法,开始给数组的各个元素赋值
		start(arr,count,circle);
		
		//打印数组
		print(arr);
	}
	
	//start方法
	private static void start(int[][] arr,int count,int circle) {
		
		//将数组长度赋值给size
		int size = arr.length;
		
		//判断如果计数器的值超过二维数组元素的个数,就结束方法
		if (count > size * size) {
			return;
		}
		
		//为第circle圈的上边填值
		for(int i = circle - 1; i <= size - circle; i++) {
			arr[circle - 1][i] = count++;
		}
		
		//为第circle圈的右边填值
		for(int i = circle ; i <= size - circle; i++) {
			arr[i][size - circle] = count++;
		} 
		
		//为第circle圈的下边填值
		for(int i = size - circle - 1; i >= circle - 1; i--) {
			arr[size - circle][i] = count++;
		}
		
		//为第circle圈的左边填值
		for(int i = size - circle - 1; i >= circle; i--) {
			arr[i][circle - 1] = count++;
		}
		
		//外圈填完,将circle加1,递归调用
		start(arr,count,circle + 1);
	}
	
	//打印输出
	private static void print(int[][] arr) {
		
		//外层循环控制行数
		for(int i = 0; i < arr.length; i++) {
			
			//内层循环控制列数
			for(int j = 0; j < arr[i].length; j++) {
				
				//输出每个元素,并用空格隔开
				System.out.print(arr[i][j] + " ");
			}
			
			//换行
			System.out.println();
		}
	}
}

6 个回复

倒序浏览
好题,好难!
回复 使用道具 举报
学习学习
回复 使用道具 举报
今天恰好也写了一下这个题,发上来参考一下

[Java] 纯文本查看 复制代码
package com.heima.other;

public class Test01 {

	/**
	 * 9、 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
	 */
	public static void main(String[] args) {
		int n = 5;       //二维数组的长度
		int[][] arr = new int[n][n];
		int num = 1;
		for (int i = arr.length; i > arr.length / 2 ; i--) {
			int j = arr.length - i;
			for (int k = j; k < i; k++) {
				arr[j][k] = num++;
			}
			for (int k = j + 1; k < i; k++) {
				arr[k][i - 1] = num++;
			}
			for (int k = i - 2; k >= j; k--) {
				arr[i - 1][k] = num++;
			}
			for (int k = i - 2; k > j; k--) {
				arr[k][j] = num++;
			}
		}
		int count = 0;
		for (int[] is : arr) {
			for (int i : is) {
				System.out.print(i + "\t");
				count++;
				if (count % n == 0) {
					System.out.println();
				}
			}
		}
	}

}
回复 使用道具 举报

学习学习下
回复 使用道具 举报
感谢,前两天看了这个题,真是一点思路没有
回复 使用道具 举报
这个题有价值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马