首先说说这道题吧,是我做过一道面试题。不是很难,关键是有点儿绕,说说我的解题步骤:
[AppleScript] 纯文本查看 复制代码 package com.itheima;
import java.util.Scanner;
/**
* 目的:写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列
*
* @version V1.0
* @author liuwei
*
*/
/*
* 分析:创建一个二维数组arr[x][y] 先分析最外圈的数据组成特点,分成四个过程 :1,x 不变 y 增加 2,y值不变 x 增加 3,x值不变
* y值减少 4,y值不变 x值减小 结束条件是,赋值的数字增加了 n * n 的时候
*/
public class Test7 {
public static void main(String[] args) {
System.out.println("请输入方阵的大小:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// 创建一个二维数组
int arr[][] = new int[n][n];
// 表示while 循环次数
int count = 0;
// 表示需要赋值的大小
int num = 1;
// 给二维数组赋值
while (num <= n * n) {
int i;
// x 不变 y 增加
for (i = count; i <= (n - count - 1); i++) {
arr[count][i] = num++;
}
// y值不变 x 增加
for (i = (count + 1); i <= (n - count - 1); i++) {
arr[i][n - count - 1] = num++;
}
// x 不变 y 减少
for (i = (n - count - 1 - 1); i >= count; i--) {
arr[(n - count - 1)][i] = num++;
}
// y值不变 x值减小
for (i = (n - count - 1 - 1); i >= (count + 1); i--) {
arr[i][count] = num++;
}
// 四次赋值结束后,进行自增
count++;
}
// 控制台输出二维数组
for (int x = 0; x < n; x++) {
for (int y = 0; y < n; y++) {
System.out.print(arr[x][y] + "\t");
}
// 每一次输出一行进行一 换行
System.out.println();
}
}
}
使用步骤:键盘录入一个数字,可以生成任意一个,这种数字图。
|