话不多说,代码如下:
public class Text {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] arr = new int[100][100];
System.out.print("输入矩阵的列数:");
int line = sc.nextInt();
System.out.print("输入矩阵的行数:");
int list = sc.nextInt();
System.out.println("矩阵如下:");
//生成一个二维数组
for (int i = 1; i <=line ; i++) {
for (int j = 1; j <=list ; j++) {
arr[i][j] = i*10 + j;
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
System.out.println("---------------------------------");
System.out.println("运行结果如下:");
getResult(arr,line,list,1);
}
/**
* 利用一圈一圈打印 矩阵
* @param arr 传入二维数组
* @param line 行
* @param list 列
* @param start 默认从1开始,依次增加, 即第一次从arr[1][1]开始,调用递归从arr[2][2]开始
*/
private static void getResult(int[][] arr,int line,int list,int start) {
//如果行大于列 竖长方形
int temp;
if(line > list){
temp = list;
} else {
// 列大于行 横长方形 , 因为正方向的话line = list,这里统一取line
temp = line;
}
//
if(start <= temp) {
// 打印第一行 首位都打印 左 - 右
for (int j = start; j <=list ; j++) {
System.out.print(arr[start][j] + " ");
}
//打印最右边一列,有尾无头 上 - 下
for (int i = start + 1; i <=line ; i++) {
System.out.print(arr[i][list] + " ");
}
// 打印最下边一行,有尾无头 右 - 左
for (int j = list -1; j >=start ; j--) {
System.out.print(arr[line][j]+ " ");
}
// 打印最左边一行,无头无尾 下-上
for (int i = line -1; i >start ; i--) {
System.out.print(arr[i][start] + " " );
}
// 一圈打印完毕, 行列-1,start+1.
getResult(arr,line - 1,list-1,start+1);
}
}
}
目前我觉得我能写到的最好的程度了,若有优化,期待交流.