您的位置:首页 > 其它

Q20:顺时针打印矩阵

2016-08-01 23:27 218 查看
public
class
Q20 {
   /**
    *
题目:顺时针打印矩阵
    *
题目说明:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
    *
解题思路:将问题分为两个部分进行考虑,1)控制打印的圈数。2)如何实现打印一圈。
    * 1)是根据起始点的特点(0,0)(1,1)来控制打印的圈数。2)是通过将一圈划分为从左到右,从上到下,从右到左,从下到上,四个部分来打印的。
    */
   public
static void
main(String[] args) {
      int[][]array={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
      Q20 test = new Q20();
      test.printMatix(array);
   }
   public
void
printMatix(int[][] array){
      //判断数组的合法性
      if(array ==
null){
         return;
      }
      int start = 0;//打印起始点的坐标值(0,0),(1,1)
      while(array[0].length > start*2 && array.length > start*2){
         printMatixValue(array, start);
         start++;
      }
   }
   private
void
printMatixValue(int[][] array,
int start){
      //从左到右进行打印,行数不变,列数变化array[start][i]
      for(int i = start; i < array[0].length-start; i++){
         System.err.print(array[start][i]+",");
      }
      //从上到下进行打印,行数变化,列数不变array[i][array[0].length-1-start]
      if(array.length-1-start > start){//只有行数大于start时才执行
         for(int i = start+1; i < array.length-1-start; i++){//array.length-1-start表示本圈打印的行数的最大值
           System.out.print(array[i][array[0].length-1-start]+".");//array[0].length-1-start表示本圈打印的列的下标值
         }
      }
      //从右到左进行打印,行数不变,列数改变array[array.length-1-start][i]
      if((array[0].length-1-start > start) && (array.length-start-1 > start)){//判断行数和列数均要大于start时才执行
         for(int i = array.length-start-1; i > start; i--){
            System.out.print(array[array.length-start-1][i]+";");
         }
      }
      //从下到上进行打印,行数改变,列数不变array[i][start]
      if((array.length-1-start > start) && (array[0].length-1-start > start)){
         for(int i = array.length-1-start; i > start; i--){
            System.out.print(array[i][start]+"。");
         }
      }
   }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: