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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© DoubleUUU 中级黑马   /  2015-11-20 01:00  /  1108 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 DoubleUUU 于 2015-11-20 01:02 编辑

分享一个自己研究了两小时的题目:打印螺旋二维数组
图解思路(附件):
  1. /*
  2. * 需求写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
  3. *
  4. * 思路:
  5. *1、定义一个方法将方阵最外圈按螺旋方式从num开始赋值,其余位置不赋值,返回-最外圈按螺旋式排列方阵
  6. *2、一个螺旋式方阵可以看成为多个-最外圈按螺旋式排列方阵-不断嵌套组成的
  7. *3.将最外圈按螺旋式排列的方阵-组合起来就得到了螺旋方阵
  8. * */
  9. public class LuoXuan {
  10.         public static void main(String[] args) {
  11.                 int[][] arr0;               
  12.                 int len=7;//定义方阵的长度
  13.                 int num=1;//定义-最外圈按螺旋式排列方阵-的起始值
  14.                 int count=1;//记录子圈的等级
  15.                 arr0=arrayOut(len,num);//得到长度为n的-最外圈按螺旋式排列方阵
  16.                 while((len=len-2)>0){//判断是否还有子圈
  17.                         int[][] arr1=new int[len][len];//arr1 用来存储子圈
  18.                         num=4*(len+2)-4+num;//计算子圈的起始值
  19.                         arr1=arrayOut(len,num);//得到子圈方阵
  20.                         for(int x=0;x<arr1.length;x++){
  21.                                 for(int y=0;y<arr1.length;y++){
  22.                                         //将子圈方阵的值赋给arr0,不断组合
  23.                                         arr0[x+count][y+count]=arr1[x][y];//子圈的行、列加上相应的级别对应的赋值给arr0
  24.                                 }
  25.                 }
  26.                         count++;//每组合了一个方阵,子圈等级加1
  27.                 }
  28.                 printArray(arr0);
  29.                 }

  30.         //将长度为len的方阵最外圈按螺旋方式从num开始赋值,其余位置不赋值,返回-最外圈按螺旋式排列方阵
  31.         //按从arr[0][0]顺时针给最外圈赋值
  32.         public static int[][] arrayOut(int len,int num){
  33.                 int[][] arr=new int[len][len];
  34.                 for(int y=0;y<len;y++){//a[0][0]→a[0][len-1]
  35.                         arr[0][y]=num++;
  36.                 }
  37.                 for(int x=1;x<len;x++){//a[0][len-1]→a[len-1][len-1]
  38.                         arr[x][len-1]=num++;
  39.                 }
  40.                 for(int y=len-2;y>=0;y--){
  41.                         arr[len-1][y]=num++;
  42.                 }
  43.                 for(int x=len-2;x>0;x--){
  44.                         arr[x][0]=num++;
  45.                 }
  46.                 return arr;
  47.         }
  48.         //打印二维数组
  49.         public static void printArray(int[][] arr){
  50.                 for(int x=0;x<arr.length;x++){
  51.                         for(int y=0;y<arr.length;y++){
  52.                                 System.out.print(arr[x][y]+"\t");
  53.                         }
  54.                         System.out.println();
  55.                 }
  56.         }
  57. }
复制代码
运行结果

小白,不太会注释,望大家见谅,觉得应该还算新颖的观点,不足之处还望大牛指教
http://bbs.itheima.com/forum.php?mod=attachment&aid=OTM3NTd8N2Y2ODA0ODg3YjQ3Nzk4ZDNhODVmZGY0ZGU5NWI3NTZ8MTczMTU5ODExOA%3D%3D&request=yes&_f=.pn



1.png (78.12 KB, 下载次数: 164)

思路

思路

3 个回复

倒序浏览
长知识了,研究下
回复 使用道具 举报
看着很复杂啊  
回复 使用道具 举报
好厉害啊,长见识了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马