当前位置 主页 > 网站技术 > 代码类 >

    java实现的顺时针/逆时针打印矩阵操作示例

    栏目:代码类 时间:2019-12-21 15:09

    java实现的顺时针/逆时针打印矩阵操作。分享给大家供大家参考,具体如下:

    public class SnakeMatrix {
      /**
       * 定义矩阵的阶数
       */
      private int n;
      //填充矩阵的值
      private int k = 1;
      private int[][] data;
      /**
       * 定义矩阵移动的方向
       */
      public enum Direction {
        left, right, up, down,
      }
      SnakeMatrix(int n) {
        this.n = n;
        data = new int[n][n];
      }
      public void clockwisePrintMatrix() {
        //定义行数
        int rowLen = data.length;
        //定义列数
        int columnLen = data.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) {
          data[row][column] = k++;
          if (upBound == downBound && leftBound == rightBound) {
            // System.out.println(" upBound :"+upBound +" downBound :"+downBound+" leftBound :"+leftBound +" rightBound :"+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;
          }
        }
        for (int i = 0; i < n; i++) {
          for (int j = 0; j < n; j++) {
            System.out.printf("%2d%s", data[i][j], " ");
          }
          System.out.println();
        }
      }
      public void anticlockwisePrintMatrix() {
        int rowLen = data.length;
        int columnLen = data.length;
        int leftBound = 0;
        int rightBound = columnLen - 1;
        int upBound = 0;
        int downBound = rowLen - 1;
        int row = 0;
        int column = 0;
        Direction direction = Direction.down;
        while (true) {
          data[row][column] = k++;
          if (rightBound == leftBound && upBound == downBound) {
            break;
          }
          switch (direction) {
            case down:
              if (row < downBound) {
                row++;
              } else {
                column++;
                direction = Direction.right;
                leftBound++;
              }
              break;
            case right:
              if (column < rightBound) {
                column++;
              } else {
                row--;
                direction = Direction.up;
                downBound--;
              }
              break;
            case up:
              if (row > upBound) {
                row--;
              } else {
                direction = Direction.left;
                column--;
                rightBound--;
              }
              break;
            case left:
              if (column > leftBound) {
                column--;
              } else {
                direction = Direction.down;
                row++;
                upBound++;
              }
              break;
            default:
              break;
          }
        }
        for (int i = 0; i < n; i++) {
          for (int j = 0; j < n; j++) {
            System.out.printf("%2d%s", data[i][j], " ");
          }
          System.out.println();
        }
      }
    }