最终代码:
class Test
{
public static void main(String[] args)
{
int size = 6;
int [][] arr = new int[size][size];
getHelixMatrix(arr);
printArray(arr);
}
public static void getHelixMatrix(int[][] arr)
{
int n = arr.length;//获取矩阵的阶数
int m = (n + 1)/2;
int x = 0, y = 0;
int k = 1;
for(int i = 0;i < m;i++)
{
//把顶边存入数组中
for(x = i;x <= (n - 1) - i;x++)
{
arr[y][x] = k++;//注意行和列下标的对应,别搞反了!
System.out.println("arr["+y+"]["+x+"]="+arr[y][x]+"\t");
}
System.out.println();
x--;//for的控制条件x++ 最后给x多加了1 ,在此处需要减去
public static void printArray(int [][] arr)
{
int n = arr.length;//获取矩阵的阶数
for(int i = 0;i < n;i++ )
{
for(int j = 0;j < n;j++)
{
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
老师给的算法:(不一样的思路,条条大路通罗马啊!大家研究研究!)
int SIZE = 5;
int arr[][] = new int[SIZE][SIZE];
int i, j, k = 0, n, m;
n = SIZE;
m = (n + 1) / 2;
for (i = 0; i < n; i++) {
// 顶边,从左到右,行不变列变
for (j = i; j <= n - i - 1; j++)
arr[i][j] = ++k;// 输出1、2、3、4、13、14
// 右边,从上到下,行变列不变
for (j = i + 1; j <= n - i - 1; j++)
arr[j][n - i - 1] = ++k; // 输出5、6、7、15
// 底边,从右到左,行不变列变
for (j = n - i - 2; j >= i; j--)
arr[n - i - 1][j] = ++k; // 输出8、9、10、16
// 左边,从下到上,行变列不变
for (j = n - i - 2; j >= i + 1; j--)
arr[j][i] = ++k; // 输出11、12
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
System.out.print(arr[i][j] + "\t");
System.out.println("");
}