java實現的順時針/逆時針打印矩陣操作示例
更新時間:2019年12月21日 12:28:11 作者:halaoda
這篇文章主要介紹了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節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章
Java Adapter 適配器模式(類適配器,對象適配器)優(yōu)缺點對比
這篇文章主要介紹了Java 適配器模式(類適配器,對象適配器)優(yōu)缺點對比的相關資料,java 適配器在基礎知識中還是比較重要的,這里就說下如何使用,需要的朋友可以參考下2016-12-12