- 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; //数组的最大索引,假设是4*4数组,那最大索引是3;
- int q = 0; //圈数控制,q=0是最外圈,q=1是向里进一圈!
- 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();
- }
- }
- }
复制代码
|