- package com.heima.test;
- import java.util.Arrays;
- import java.util.Scanner;
- public class Test6 {
- /*
- * 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
- * 如: n = 4 则打印
- * 1 2 3 4 i不变j++
- 12 13 14 5 j不变i++
- 11 16 15 6 i不变j--
- 10 9 8 7 j不变i-- i++ j++
- */
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入一个数字");
- int i = sc.nextInt();
- int[][] arr = new int[i][i];
- printArray(arr);
- }
- public static void printArray(int[][] arr) {
- int i = 0,j = 0; //两个变量用于控制二维数组的索引
- int num = 1; //用于赋值
- int max = arr.length - 1,min = 0 ; //用来控制i,j的变化
- while(min <= max) {
- //向右开始添加元素
- while(j < max) {
- arr[i][j++] = num++;
- }
- //向下开始添加元素
- while(i < max) {
- arr[i++][j] = num++;
- }
- //向左添加元素
- while(j > min) {
- arr[i][j--] = num++;
- }
- //向上开始添加元素
- while(i > min) {
- arr[i--][j] = num++;
- }
- //如果说我们输入的值为奇数时,最中心的数通过上面的代码添加不上元素,所有做个判断.
- if (min == max) {
- arr[i][j] = num;
- }
- //向上添加元素的时候,i索引多--了一次
- i++;
- //因为每个一维数组的j索引都已经添加过了元素,所以j索引要++
- j++;
- //while的循环条件也要随之变化,由外向内添加元素的话,每一圈下来都要执行
- max--;
- min++;
- }
- //这个是将二维数组转换为标准格式的代码,我开始没注意题目要求的打印方式,就没写.
- //打印方式挺简单,楼主可以自己写写.
- /*String line = "";
- for (int k = 0; k < arr.length; k++) {
- for (int k2 = 0; k2 < arr[k].length; k2++) {
- if (k == 0 && k2 == 0) {
- line = "{[" + arr[k][k2] + ",";
- }else if(k2 == 0) {
- line = line + "[" + arr[k][k2] + ",";
- }else if(k == arr.length - 1 && k2 == arr[k].length - 1) {
- line = line + arr[k][k2] + "]}";
- }else if(k2 == arr[k].length - 1) {
- line = line + arr[k][k2] + "],";
- }else {
- line = line + arr[k][k2] + ",";
- }
-
- }
- }
- System.out.println(line);*/
- }
- }
复制代码 |