昨晚看了个贴是有关螺旋方阵的,链接:http://bbs.itheima.com/thread-189202-1-1.html,于是乎自己也回去研究了一下,下午赶出来了,和大家分享一下
import java.util.Scanner;
public class FangZhenTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 手动输入定义方阵的长和宽的值,长和宽的长度一致为n
System.out.println("请输入一个正整数:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// 定义二位数组
int[][] arr = new int[n][n];
// 定义数组坐标,x为横向坐标,y为竖向坐标,
int x, y;
// 定义总共需要循环的层数
int m = (n+1)/ 2;
// 定义累加器
int count = 0;
// 定义循环起始值z为0()
for (int z = 0; z < m; z++) {
// 当z=0时,第一次循环开始
//从(0,0)坐标开始,x值固定,到(0,n-1)坐标遍历累加赋值给对应数组坐标,第二层从(1,1)到(1,n-1)以此类推。
for (x = z, y = x; y < n -z; y++) {
arr[x][y] = ++count;
}
count--;
// 从(0,n-1)坐标开始,y值固定,到(n-1,n-1)坐标遍历递加赋值给对应数组坐标,第二层从(1,n-2)到(n-2,n-2)以此类推。
for (y = n - z-1 , x = z; x < n- z; x++) {
arr[x][y] = ++count;
}
count--;
//从(n-1,n-1)坐标开始,x值固定,到(n-1,0)坐标,y值递减遍历赋值给对应数组坐标,第二层。。。类推
for (x = n - z -1, y = x; y >=z; y--) {
arr[x][y] = ++count;
}
count--;
//从(n-1,0)坐标开始,y值固定,到(1,0)坐标,x值递减遍历赋值给对应数组坐标,第二层。。。类推
for (y = z, x =n-z-1; x >=z+1; x--) {
arr[x][y] = ++count;
}
}
// 遍历输出数组
System.out.println("你要打印的螺旋方阵如下:");
for (x = 0; x < n; x++) {
for (y = 0; y < n; y++) {
System.out.print(arr[x][y] + "\t");
}
System.out.println();
}
}
}
说一下自己的感受吧,主体思想是用二维数组标记空间坐标,建立一个累加器,使用for的嵌套循去操作累加的数据在螺旋数据结构体中遍历赋值,遍历打印输二维数组就行了,这个题目其实之前在看视频课的时候有作为一个扩展题看过,也理过思路,大概知道思考方向没去深究,因为本人觉得既然Java是一门面向对象的编程语言,其实许多实现方法我们是并不需要太过去纠结,我觉得毕竟每个人的精力都是有限的,不知道大家有没有看过火影这部动漫,虽然后面收尾狗血得有点惨不忍睹,但里面的一个人物我一直很是喜欢的,没错,是鼬,他说过每个每个人都有自己器量,只有不断测试自己的器量才能更好地给自己定位,作为初学者的我觉得还是老老实实先打好基础再说,没必要特意耗费过多的精力到那些偏难冷门的题解去,谨记一点:我们学习知识是为了开拓未来的,并不是为了损耗自身!再拿如今高精度集成电路来说吧,虽然我们明白他们底几乎都是以二进制数字电路形式实现,但具体到每一步如何实现是几乎不敢想象的,上午写出来的时候,有个坐标遍历时提示索引越界错误,调了许久都没找到原因,特烦躁,脑子都有点炸设为感觉,虽然最后还是弄出来了,但觉得好累,也浪费了大半天时间没好好学习。。。说句实话,其实我也是比较喜欢转牛角尖的人不然也不会叨这么多话了:L。。。好吧,大家一起努力~为我们心中的梦想{:3_63:}
|
|