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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ls20090726 中级黑马   /  2016-4-26 19:23  /  635 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

8、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印
                          1        2        3        4
                        12        13        14        5
                        11        16        15        6
                        10        9        8        7

8 个回复

倒序浏览
  1. package com.heima.test;

  2. import java.util.Arrays;
  3. import java.util.Scanner;

  4. public class Test6 {
  5.         /*
  6.          * 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
  7.          *  如: n = 4 则打印
  8.          *   1        2        3        4                                                                                                i不变j++
  9.         12        13        14        5                                                                                        j不变i++
  10.         11        16        15        6                                                                                        i不变j--
  11.         10        9        8        7                                                                                        j不变i--         i++   j++
  12.          */
  13.         public static void main(String[] args) {
  14.                 Scanner sc = new Scanner(System.in);
  15.                 System.out.println("请输入一个数字");
  16.                 int i = sc.nextInt();
  17.                 int[][] arr = new int[i][i];
  18.                 printArray(arr);
  19.         }

  20.         public static void printArray(int[][] arr) {
  21.                 int i = 0,j = 0;                                                                                                                //两个变量用于控制二维数组的索引
  22.                 int num = 1;                                                                                                                        //用于赋值
  23.                 int max = arr.length - 1,min = 0 ;                                                                //用来控制i,j的变化
  24.                 while(min <= max) {
  25.                         //向右开始添加元素
  26.                         while(j < max) {
  27.                                 arr[i][j++] = num++;
  28.                         }
  29.                         //向下开始添加元素
  30.                         while(i < max) {
  31.                                 arr[i++][j] = num++;
  32.                         }
  33.                         //向左添加元素
  34.                         while(j > min) {
  35.                                 arr[i][j--] = num++;
  36.                         }
  37.                         //向上开始添加元素
  38.                         while(i > min) {
  39.                                 arr[i--][j] = num++;
  40.                         }
  41.                         //如果说我们输入的值为奇数时,最中心的数通过上面的代码添加不上元素,所有做个判断.
  42.                         if (min == max) {
  43.                                 arr[i][j] = num;
  44.                         }
  45.                         //向上添加元素的时候,i索引多--了一次
  46.                         i++;
  47.                         //因为每个一维数组的j索引都已经添加过了元素,所以j索引要++
  48.                         j++;
  49.                         //while的循环条件也要随之变化,由外向内添加元素的话,每一圈下来都要执行
  50.                         max--;
  51.                         min++;
  52.                 }
  53.                 //这个是将二维数组转换为标准格式的代码,我开始没注意题目要求的打印方式,就没写.
  54.                 //打印方式挺简单,楼主可以自己写写.
  55.                 /*String line = "";
  56.                 for (int k = 0; k < arr.length; k++) {
  57.                         for (int k2 = 0; k2 < arr[k].length; k2++) {
  58.                                 if (k == 0 && k2 == 0) {
  59.                                         line = "{[" + arr[k][k2] + ",";
  60.                                 }else if(k2 == 0) {
  61.                                         line = line + "[" + arr[k][k2] + ",";
  62.                                 }else if(k == arr.length - 1 && k2 == arr[k].length - 1) {
  63.                                         line = line + arr[k][k2] + "]}";
  64.                                 }else if(k2 == arr[k].length - 1) {
  65.                                         line = line + arr[k][k2] + "],";
  66.                                 }else {
  67.                                         line = line + arr[k][k2] + ",";
  68.                                 }
  69.                                
  70.                         }
  71.                 }
  72.                 System.out.println(line);*/
  73.         }

  74. }
复制代码
回复 使用道具 举报
围观一下大神
回复 使用道具 举报
学习学习
回复 使用道具 举报
围观,学习啦
回复 使用道具 举报
320215787 来自手机 中级黑马 2016-4-27 12:17:56
地板
围观大神,这个一直写不出,长知识了
回复 使用道具 举报
强势围观
回复 使用道具 举报
完全看不懂题意怎么办
回复 使用道具 举报
膜拜啊!!!!!!!!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马