package passage2;
import java.util.Scanner;
public class asd {
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();
asd s= new asd();
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(); //换行
}
}
}
}
}
05-20
435
02-16
278
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交