输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数
字,例如,如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.。
思路是这样的
从外圈往里圈打印,首先要计算出他的层数(需要打印几圈,是和最短边有关)
写一个二维矩阵,免得测试手写
public static int [][] procte(int row){
int[][] array = new int[row][row];
int count =0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j <array[i].length ; j++) {
array[i][j] = count++;
}
}
return array;
}
关键代码
public static void print(int[][] array){
int row = array.length ;//获取行数
int col = array[0].length;//获取列数
int x=0;
int y=0;
// System.out.print(array[x][y]+" ");
for (int i = 0; i < (col + 1) / 2; i++) {
//从左向右遍历
for (int j = y; j < col - i-1; j++) {
System.out.print (array[x][y++]+" ");
}
//从上到下遍历
for (int j = x; j < row - i-1; j++) {
System.out.print (array[x++][y]+" ");
}
//从右到左遍历
for (int j = y; j > i ; j--) {
System.out.print (array[x][y--]+" ");
}
//从下向上
for (int j = x; j > i+1; j--) {
System.out.print (array[x--][y]+" ");
}
}
System.out.print(array[x][y]);//细节,最后一个打印不上去,所以把最后一个写出来
}
测试直接调用
public static void main(String[] args) {
int[][] procte = procte(4);
for (int i = 0; i < procte.length; i++) {
for (int j = 0; j <procte[i].length ; j++) {
System.out.print(procte[i][j]+" ");
}
System.out.println();
}
print(procte);
}