求大神 帮忙看一下 有没有什么问题 努力了两天终于搞定了 内心有点小激动 检验成果的时候到了
/*
需求:
写一方法,打印等长的二维数组,要求从1开始的自然数
由方阵的最外圈向内螺旋方式地顺序排列。
如: n = 4 则打印:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
思路:
1.二维数组的特殊遍历
2.把整数赋值给特殊遍历的二维数组
步骤:
1.横向从左往右赋值,校正二维数组角标;
2.纵向从上往下赋值,校正二维数组角标;
3.横向从右往左赋值,校正二维数组角标;
4.纵向从下往上赋值,校正二维数组角标;
5.循环上述1--4步;输出打印方阵。
*/
import java.util.Scanner;
class ArryTest
{
public static void main(String[] args)
{
//定义变量、创建二维数组
int a = 0;
int b = 0;
int num = 0;
Scanner sc = new Scanner(System.in);
System.out.println("输入想要打印的方阵的边长:");
int lin = sc.nextInt();
int[][] arr = new int[lin][lin];
//遍历数组
int temp = 0;
for(int n = lin;n>1;n--){
//横向从左往右赋值
for(;b<=n-1;++b){
arr[a][b] = ++num;
}
//校正二维数组角标
--b;
++a;
//纵向从上往下赋值
for(;a<=n-1;++a){
arr[a][b] = ++num;
}
//校正二维数组角标
--a;
--b;
//横向从右往左赋值
for(;b>=n-1-a+temp;--b){
arr[a][b] = ++num;
}
//校正二维数组角标
++b;
--a;
//纵向从下往上赋值
for(;a>b;a--){
arr[a][b] = ++num;
}
//校正二维数组角标
++b;
++a;
temp++;
}
//打印输出
for(int x=0; x<arr.length; x++) {
for(int y=0; y<arr[x].length; y++) {
System.out.print(arr[x][y]+"\t");
}
System.out.println();
}
}
}
|
|