import java.util.Scanner;
public class LuoXuanPrint {
/**需求 写一个方法,打印等长的二维数组,要求:
* 从1开始的自然数由方阵的最外圈向内螺旋方式顺序排列,
* 如:n=4则打印
* 1 2 3 4
* 12 13 14 5
* 11 16 15 6
* 10 9 8 7
* 思路:
* 1创立一个n接二维数组
* 2螺旋排列(怎么实现呢?);其实吧它是有个规律的按照横打印,竖打印,反向横打印,反向竖打印,
* 那我依照及计算机的顺序流程打印不就是可以实现了吗!?
* 所以我就按照她的规律就一下子打印了一个口字型!然后我在循环i/2次!但是有个问题,
* 如果是单数的数组它:如(n=9)/2后会把最后一个给省略掉,所以我就在循环体的循环次数是a<=i/2!
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("输入要打印的数:");
int i = sc.nextInt();
int[][] arr = new int[i][i];//定义一个i*i数组
int n = i - 1;
int q = 0;
int w = 0;
int a = 0;
//核心思想就是口字走路线!
while (a <= i / 2) {
// 打印横行
for (int j1 = q; j1 <= n - q; j1++) {
arr[q][j1] = ++w;
}
// 打印竖行
for (int j1 = 1 + q; j1 <= n - q; j1++) {
arr[j1][n - q] = ++w;
}
// 反向横行
for (int j1 = n - q - 1; j1 >= q; j1--) {
arr[n - q][j1] = ++w;
}
// 反向竖行
for (int j1 = n - q - 1; j1 > q; j1--) {
arr[j1][q] = ++w;
}
q++;
++a;
}
System.out.println();
for (int j = 0; j < arr.length; j++) {
for (int j2 = 0; j2 < arr[j].length; j2++) {
System.out.print(arr[j][j2] + "\t");
}
System.out.println();
}
}
|
|