我们假设我们要打印的螺旋方阵是4*4的方阵,那么它应该是这样的
代码如下
package one;
import java.util.Scanner;
public class Arr {
/**
* 实现打印螺旋方阵
* 2019.09.27
* @param args
*/
public int[][] creatMatrix(int n){
int [][] arr = new int[n][n]; //定义一个n*n的数组
int right = 1, down = 2, left = 3, top = 4; //定义上下左右四个打印方向
int direction = right;
int totle = n * n; //矩阵的总元素数目
int i = 0, j = 0;
for(int p=1; p<=totle; p++){
arr[i][j] = p;
//打印方向向右
if(direction == right){
if(j + 1 < n && arr[i][j+1] == 0){ //未超出右边界,且还是未被赋值时
j++; //向右继续打印---行不变,列+1
}else{ //到达右边界,方向变为向下,列不变,行+1
i++;
direction = down;
continue;
}
}
//方向向下
if(direction == down){
if(i+1<n && arr[i+1][j] == 0){
i++;
}else{
j--; //左移一列
direction = left;
continue;
}
}
//方向向左
if(direction == left){
if(j-1 >= 0 && arr[i][j-1] == 0){
j--;
}else{
i--;
direction = top;
continue;
}
}
//方向向上
if(direction == top){
if(i-1 >= 0 && arr[i-1][j] == 0){
i--;
}else{
j++;
direction = right;
continue;
}
}
}
return arr;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print("请输入矩阵维度n的值:");
Scanner li = new Scanner(System.in);
int n =li.nextInt();
Arr s= new Arr();
int [][] data = s.creatMatrix(n);
for(int i = 0; i < n; i ++){
for(int j = 0; j < n; j ++){
if(j<(n-1)){ //未打印到右边界时,正常打印
System.out.printf("%5s",data[i][j] + " ");
}else{ //打印至右边界时
System.out.printf("%5s",data[i][j]);
System.out.println(); //换行
}
}
}
}
}
程序测试结果如下