您的位置:首页 > 编程语言 > Java开发

java顺时针、逆时针打印矩阵

2017-11-30 14:29 351 查看
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

;
}

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

}

4000
}

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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);int number = 5;SnakeMatrix snakeMatrix = new SnakeMatrix(number);snakeMatrix.anticlockwisePrintMatrix();//snakeMatrix.clockwisePrintMatrix();}}
直接进行使用,有两个方法,一个正序一个倒序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  enum