首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java-51-输入一个矩阵,依照从外向里以顺时针的顺序依次打印出每一个数字

2012-09-16 
java-51-输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。public class PrintMatrixClockwi

java-51-输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

public class PrintMatrixClockwisely {/** * Q51.输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:1              2             3            45              6             7            89              10           11           1213             14           15           16则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。 */public enum Direction{left,right,up,down,}public static void main(String[] args) { int[][]  matrix= { { 1, 2, 3, 4, 5}, { 6, 7, 8, 9,10}, {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25}, }; printMatrixClockwisely(matrix);}/* * 思路比较直观, * 从左往右打印,到了右边界则向下,到了下边界就往左,到了左边界就往上。 * 注意结束条件以及打印的时机 */public static void printMatrixClockwisely(int[][] matrix){int rowLen=matrix.length;int columnLen=matrix[0].length;Direction direction=Direction.right;int upBound=0;int downBound=rowLen-1;int leftBound=0;int rightBound=columnLen-1;int row=0;int column=0;while(true){System.out.print(matrix[row][column]+" ");//2 3 4 5 10 15 20 25 24 23 22 21 16 11 6 7 8 9 14 19 18 17 12 13if(upBound==downBound&&leftBound==rightBound){break;}switch (direction){case right:if(column<rightBound){++column;}else{++row;direction=Direction.down;++upBound;}break;case down:if(row<downBound){++row;}else{--column;direction=Direction.left;--rightBound;}break;case up:if(row>upBound){--row;}else{++column;direction=Direction.right;++leftBound;}break;case left:if(column>leftBound){--column;}else{--row;direction=Direction.up;--downBound;}break;default:break;}}}}

热点排行