题目要求:
第一行输入矩阵的行和列M、N
第二行输入矩阵内容
输出:从外向内一圈一圈地打印矩阵
例如输入:
3 4
1 2 3 4
5 6 7 8
9 10 11 12
输出
1 2 3 4 8 12 11 10 9 5 6 7
import java.util.Scanner;
public class Main{
/**
* 打印一圈
* @param data
* @param rowMin 这一圈最小行号
* @param colMin 这一圈最小列号
* @param rowMax 这一圈最大行号
* @param colMax 这一圈最大列号
*/
public static void printCircle(int[][] data,int rowMin,int colMin,int rowMax,int colMax){
int i=rowMin,j=colMin;
for(j=colMin;j<=colMax;j++){// 打印上面的一行
System.out.print(data[i][j]+" ");
}
j--;
for(i=rowMin+1;i<=rowMax;i++){// 打印右边的一列
System.out.print(data[i][j]+" ");
}
i--;
for(j=colMax-1;j>=colMin;j--){// 打印下面的一行
System.out.print(data[i][j]+" ");
}
j++;
for(i=rowMax-1;i>=rowMin+1;i--){// 打印左边的一列
System.out.print(data[i][j]+" ");
}
}
public static void main(String[] args){
int M,N;
int[][] data;// matrix
try(Scanner sc=new Scanner(System.in)){
// 输入行号列号
M=sc.nextInt();
N=sc.nextInt();
data=new int[M][N];
// 输入矩阵
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
data[i][j]=sc.nextInt();
}
}
// 初始时,最小行号和最小列号为0,最大行号和最大列号为维数减1
int rowMin=0,rowMax=M-1,colMin=0,colMax=N-1;
// 循环打印一圈,每一圈结束将最小行号和最小列号加1,最大行号和最大列号减1
while(rowMin<=rowMax&&colMin<=colMax){
printCircle(data, rowMin, colMin, rowMax, colMax);
rowMin++;
rowMax--;
colMin++;
colMax--;
}
}catch(Exception e){
e.printStackTrace();
}
}
}