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


本文向大家介绍java实现的顺时针/逆时针打印矩阵操作示例,包括了java实现的顺时针/逆时针打印矩阵操作示例的使用技巧和注意事项,需要的朋友参考一下

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();
    }
  }
}

首先呢上面是定义一个工具类,

public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    int number = 5;
    SnakeMatrix snakeMatrix = new SnakeMatrix(number);
    snakeMatrix.anticlockwisePrintMatrix();
    //snakeMatrix.clockwisePrintMatrix();
  }
}

直接进行使用,有两个方法,一个正序一个倒序

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#yiidian.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。