打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
2016-03-31 11:54
483 查看
import java.util.Scanner; public class Test8 { /** * 8、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 * 如: n = 4 则打印: * 1 2 3 4 * 12 13 14 5 * 11 16 15 6 * 10 9 8 7 */ /** * 思路: * 1.等长的二维数组,最大的数据是n*n * 2.先打印最外面一圈 * 3.根据i,j变化,进入第二圈,依次循环 * 编程过程: * 按照以上思路,先将最外层添加完毕,再修改每行,每列的截止条件 */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); //键盘录入行数,进行打印 System.out.println("请输入行数: "); int row = sc.nextInt(); int col = row; //行,列相等,为思路明确,在此同样定义列 int num = 1; //要添加的数据,初始化为1 int i = 0; //i代表行初始化为0 int j = 0; //j代表列初始化为0 int arr[][] = new int[row][col]; //定义二维数组 while(num <= row * col){ //循环的条件为num <= 最大值 /** * ---------------------> * 每一行 从左--->右 添加数据 * 第一个元素开始j = i,此行最后一个元素的条件j < col-i */ for ( j = i;j < col-i;j++){ arr[i][j] = num++; } /** * 每一列 从上---->下 添加数据 * 在此之前,调整行列的标识变化 * 列减1 j--; 行加1 i++; * 数据加到 i < j+1 为止 */ j--; i++; for(; i < j+1 ;i++){ arr[i][j] = num++; } /** * 每一行,从右----->左 添加数据 * 在此之前,调整行列的标识变化 * 行减1 i--; 列减1 j--; * 数据加到j >=row-1-i 为止 */ i--; j--; for(;j >=row-1-i;j--){ arr[i][j] = num++; } /** * 每一列,从下----->上 添加数据 * 在此之前,调整行列的标识变化 * 列加1 j++; 行减1 i--; */ j++; i--; for(;i >= j+1;i--){ arr[i][j] = num++; } /* * 这一圈循环完成 * 为下一次里圈循环做准备 * 在此之前,调整行列的标识变化 * 行加1 i++;列加1 j++; */ i++; j++; } //打印数组 printArray(arr); } /** * 自定义二维数组打印方法printArray(int[][] arr) * for 循环嵌套打印 * 行i < arr.length * 列j < arr[i].length * @param arr */ public static void printArray(int[][] arr) { for(int i = 0;i < arr.length;i++){ for(int j = 0;j < arr[i].length;j++){ System.out.print(arr[i][j]+"\t"); } System.out.println(); } } }
相关文章推荐
- MongoDB使用小结:一些常用操作分享
- cocos2dx中CC_CALLBACK_N的理解
- 设置透明窗体
- <响应式布局>5---设计流程
- Tcp上传文件 服务器端
- 使用TCP协议写一个可以上传文件的服务器和客户端
- 利用資源分割優化iOS包裝大小
- 图片模糊处理
- Windows下使用code::blocks开发cocos2dx
- centos 正确 安装 jdk
- OpenGL step to step(1)
- Robocopy.exe使用详例
- activity的几种启动模式
- 关于结构体包含结构体的类型数据大小
- Spark RDD API详解(一) Map和Reduce
- DruidDataSource配置
- nodeName、nodeValue 以及 nodeType
- 友盟微社区
- XMPPFramework 简介
- 将字符串中进行反转。abcde --> edcba