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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

呵呵哒small

中级黑马

  • 黑马币:17

  • 帖子:186

  • 精华:0

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

  1. import java.util.Scanner;

  2. public class Spiral
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 System.out.print("请输入打印二维数组的长度:");
  7.                 int length = 0;
  8.                 Scanner sc = new Scanner(System.in);
  9.                 length = sc.nextInt();
  10.                 sc.close();
  11.                 int[][] matrix = new int[length][length];
  12.                 int count = 0,start = 0,value = 1,temp = 0;
  13.                 count = (length + 1) / 2;

  14.                 for(int i = 0;i < count;i++)
  15.                 {
  16.                         Spiral sp = new Spiral();
  17.                         temp = sp.build(matrix,start,value,length);
  18.                         value = temp;
  19.                         start++;
  20.                 }

  21.                 for(int i = 0;i < length;i++)
  22.                 {
  23.                         for(int j = 0;j < length;j++)
  24.                                 System.out.print(matrix[i][j] + "\t");
  25.                         System.out.print("\n");
  26.                 }
  27.         }
  28.        
  29.         public int build(int[][] matrix, int start, int value, int length)
  30.         {
  31.                 int i = 0,j = 0;
  32.                 for(i = start;i < length;i++)
  33.                 {
  34.                         if(matrix[start][i] != 0)
  35.                                 break;
  36.                         else
  37.                                 matrix[start][i] = value++;
  38.                 }
  39.                 i--;
  40.                 for(j = start + 1;j < length;j++)
  41.                 {
  42.                         if(matrix[j][i] != 0)
  43.                                 break;
  44.                         else
  45.                                 matrix[j][i] = value++;
  46.                 }
  47.                 j--;
  48.                 for(i--;i >= start;i--)
  49.                 {
  50.                         matrix[j][i] = value++;
  51.                 }
  52.                 i++;
  53.                 for(j--;j > start;j--)
  54.                 {
  55.                         matrix[j][i] =value++;
  56.                 }
  57.                 return value;
  58.         }
  59. }
复制代码


如有更好的算法欢迎交流!!!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马