题目描述
给你一个正整数 n ,生成一个包含 1 到 n的平方 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形二维整型数组 matrix ,并将其打印出来.
思路图
代码
public class day9 {
public static void main(String[] args) {
//测试用例
solution(3);
System.out.println("**************");
solution(6);
}
public static void solution(int n){
//赋值用到的数
int num=1;
//定义二维数组
int[][] array=new int[n][n];
//给定行数列数最大最小值
int cmax=n-1;
int rmax=n-1;
int cmin=0;
int rmin=0;
//出现整数平方结束循环
while (num<n*n){
//行数不变列数增加,最小行数加1
for (int j = rmin; j <=rmax; j++) {
array[cmin][j]=num;
num=num+1;
if(j==rmax){
cmin++;
break;
}
}
//列数不变,行数增加,最大列数减1
for(int j=cmin;j<=cmax;j++){
array[j][rmax]=num;
num=num+1;
if(j==cmax){
rmax--;
break;
}
}
//行数不变列数减少,最大行数减一
for(int j=rmax;j>=rmin;j--){
array[cmax][j]=num;
num=num+1;
if(j==rmin){
cmax--;
break;
}
}
//列数不变,行数减少,最小列数加1
for(int j=cmax;j>=cmin;j--){
array[j][rmin]=num;
num=num+1;
if(j==cmin){
rmin++;
break;
}
}
}
//n为奇数时(n-2,n-2)即中心值必须单独赋值,尝试依靠循环解决,没成功
if(n%2!=0){
array[n-2][n-2]=n*n;
}
//遍历二维数组
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
System.out.print(array[i][j]+"\t");
if(j== array.length-1){
System.out.println();
}
}
}
}
}
遇到一个问题
循环对于偶数的可以完美的赋值,但是奇数的时候中心无法赋值,修改几次要么还是赋值不上,要么赋值比预期大一,比如n=3时中心值要么为0要么为10,最终还是添加了if语句给中心值赋值,不知道该改循环哪里
示例