[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();
}
}
}
|