顺时针输出一个二维数组的内容

来源:互联网 发布:ubuntu 显示文件列表 编辑:程序博客网 时间:2024/05/22 08:19

前几天在一道笔试题里看到的,要求输出一个二维矩阵的内容,比如,给定一个二维数组

  {{1, 2, 3, 10, 17},
 {4, 5, 6, 11, 18},
 {7, 8, 9, 12, 19},
 {13,14,15,16, 20},
 {21,22,23,24, 25}}

输出必须为1 2 3 10 17 18 19 20 25 24 23 22 21 13 7 4 5 6 11 12 16 15 14 8 9,

看似简单地题目花了不少时间来做,写起来不熟练,调试了很多次,如果是笔试或者面试手写的话肯定会挂掉,所以这里重新温习一下。

public class ClockwisePrint {public static void main(String[] args) {// TODO Auto-generated method stubint [][] a = {{1, 2, 3, 4, 5},<span style="white-space:pre"></span>      {4, 5, 6, 7, 8},      {7, 8, 9, 10, 6},     {27,18, 19,11, 10},      {1, 2, 3, 4,  5},      {4, 5, 6, 7,  8},      {7, 8, 9, 10, 6},      {1, 2, 3, 4,  5},  };ClockwisePrint c = new ClockwisePrint();c.colokWisePrint(a);}public void colokWisePrint(int a[][]){int width = a[0].length;int height = a.length;int startX = 0;int startY = 0;int endX = startX + height-1;int endY = startY + width -1;while(true){if(startX > endX || startY > endY)break;if(startX < endX && startY < endY){print(a, startX, startY, endX, endY);startX ++;startY ++;endX --;endY --;}if(startY <=endY && startX == endX)//说明只有一行数据,输出由左至右即可{for(int i = startY ; i <= endY ; i++){System.out.print( a[startX][i] + " ");}break;}if(startX <=endX && startY == endY){//说明只有一列数据,直接由上到下输出for(int i = startX ; i<= endX ; i++){System.out.print( a[i][startY] + " ");}break;}}}public void print(int [][] a,int startX,int startY,int endX,int endY){for(int i = startY;i<= endY ; i++){System.out.print(a[startX][i] + " " );//输出第一行数据}for(int i = startX+1 ; i <= endX ; i ++){System.out.print(a[i][endY] + " "); // 输出第一竖列数据}for(int i = endY-1 ; i >= startY ; i--){System.out.print(a[endX][i] + " ");//输出第二行数据}for(int i = endX-1 ; i >= startX+1 ; i--){System.out.print(a[i][startY] + " ");//输出最后一列数据}System.out.println();//打印换行以便层数的查看}}
运行结果:

1 2 3 4 5 8 6 10 5 8 6 5 4 3 2 1 7 4 1 27 7 4 
5 6 7 10 11 4 7 10 9 8 5 2 18 8 
9 19 3 6 

0 0
原创粉丝点击