写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
package com.itheima;
public class Test9 {
public static void main(String[] args){
//定义数组的长度
int len = 10;
//调用得到螺旋数组的方法
int[][] arys = getSpiralArray(len);
//用for循环嵌套,对数组进行遍历输出
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
{
System.out.print(arys[i][j] + "\t");
}
System.out.println();
}
}
public static int[][] getSpiralArray(int length) {
//定义一个等长度的数组
int[][] array = new int[length][length];
int upcol = 0;
//向右走列数
int leftRow = 0;
//记录最后一行的变量
int downCol = length-1;
//记录最后一列的变量
int rightRow = length-1;
int num = 1;
while(length > 0){
//向右走,循环遍历,并把得到的值添加到数组中
for(int i = 0, temp = leftRow; i < length; i++){
//第一行,打印向右走,随着列数的的自增1,第一行的元素也随着自增1
array[upcol][temp++] = num++;
}
//向下走,循环遍历,并把得到的值添加到数组中
for(int i = 0, temp = leftRow+1; i < length-1; i++){
//最后一列,打印向下走,随着行数的自增1,最后一列的元素也自增1
array[temp++][downCol] = num++;
}
//向左走 ,循环遍历,并把得到的值添加到数组中,是从length-1列的最后一个元素开始,所以是rightRow-1
for(int i = 0, temp = rightRow-1; i < length-1; i++){
//最后一行,打印向左走,随着列数的自减1,最底层的元素自增1
array[downCol][temp--] = num++;
}
//向上走,循环遍历,并把得到的值添加到数组中 ,是从length-1行的最后一个元素开始,所以是downCol-1
for(int i = 0, temp =downCol-1; i< length-2; i++){
//最左边一列,向上打印,随着行数的自减1,最左边的一列中的元素自增1
array[temp--][upcol] = num++;
}
//再往里边依次循环,直到打印到最后的一个数就是length的平方
//每打印最外面的一圈,内圈的长度减少2
length = length - 2;
//向右走的行数增加1,也就是说第二轮循环是从第二行、第二列、length-1行、length-1列
upcol++;
leftRow++;
downCol--;
rightRow--;
}
return array;
}
} |