黑马程序员技术交流社区

标题: 自己写的螺旋方阵 [打印本页]

作者: 鸡脑壳    时间: 2015-4-19 23:58
标题: 自己写的螺旋方阵
首先贴代码
import java.util.Scanner;
/*
要求:输出打印螺旋方阵

思路:
        1、把螺旋方阵拆成四种循环,依次分别为,往右赋值,往下赋值,往左赋值,往上赋值
        2、建立二维数组,用索引来控制整个复制过程
        3、找到思路1中四种循环的起点开始赋值
        4、思路1循环赋值一次后,存在一个最外围的大圈,开始找第二个大圈的起点
        5、找到第二个大圈的起点开始赋值
        6、重复上述步骤,直到方阵填满(填满的次数 = 方阵的边长 / 2 + 1;)
        7、打印出二维数组
*/
public class Demo {
        public static void main(String[] args) {
                // 建立键盘录入对象
                Scanner sc = new Scanner(System.in);

                // 设 x 为二维数组的横轴,y 为二维数组的纵轴,
                int x = 0, y = 0;

                // 创建变量从1开始赋值
                int n = 1;

                // 打印提示语句
                System.out.println("请输入您想要的螺旋方阵的大小:");

                // 输入螺旋方阵的大小
                int temp = sc.nextInt();

                // 建立二维数组存储数据
                int[][] arr = new int[temp][temp];

                // 建立控制循环
                for (int i = 0; i < arr.length; i++) {
                        // 固定横轴,纵轴依次相加依次赋值
                        // for循环中的初始化部分为螺旋方阵赋值的起点
                        for (x = x, y = y; y < arr.length - i; y++) {
                                arr[x][y] = n++;
                        }
                        // 固定纵轴,横轴依次相加依次赋值
                        // for循环中的初始化部分为螺旋方阵赋值的第一个转折点
                        for (x = x + 1, y = y - 1; x < arr.length - i; x++) {
                                arr[x][y] = n++;
                        }
                        // 固定横轴,纵轴依次相减赋值
                        // for循环中的初始化部分为螺旋方阵赋值的第二个转折点
                        for (x = x - 1, y = y - 1; y >= i; y--) {
                                arr[x][y] = n++;
                        }
                        // 固定纵轴,横轴依次相减赋值
                        // for循环中的初始化部分为螺旋方阵赋值的第三个转折点
                        for (x = x - 1, y = y + 1; x >= i + 1; x--) {
                                arr[x][y] = n++;
                        }
                       
                        //一次大循环后,索引值要分别加一,x加一是因为为了不越界,y加一是为了成为下一个循环的起点
                        x = x + 1;
                        y = y + 1;
                }

                // 输出打印这个二维数组
                for (int i = 0; i < arr.length; i++) {
                        for (int j = 0; j < arr.length; j++) {
                                if (arr[i][j] >= 1 && arr[i][j] <= 9) {
                                        System.out.print(arr[i][j] + "    ");
                                } else if (arr[i][j] >= 10 && arr[i][j] <= 99) {
                                        System.out.print(arr[i][j] + "   ");
                                } else if (arr[i][j] >= 100 && arr[i][j] <= 999) {
                                        System.out.print(arr[i][j] + "  ");
                                } else if (arr[i][j] >= 1000 && arr[i][j] <= 9999) {
                                        System.out.print(arr[i][j] + " ");
                                }
                        }
                        System.out.println();
                }
        }
}

上传图片为这个代码的效果图

上课草稿012 2015-04-20, 00_01_36.jpg (103.16 KB, 下载次数: 84)

效果图

效果图

作者: 一个好人    时间: 2015-4-20 00:08
完全看不懂的样子
作者: itheima_llt    时间: 2015-4-20 00:31
不错啊,加油
作者: 懒的呼吸    时间: 2015-4-20 09:00
二维数据基本不会用……
作者: 若果每天都努力    时间: 2015-4-20 09:39
厉害,因为做过这个题,所以表示佩服。
作者: 鸡脑壳    时间: 2015-4-20 22:12
一个好人 发表于 2015-4-20 00:08
完全看不懂的样子

。。。。。
主要是为了技术分。。。
看别人发代码都可以加分,我也试试传自己写的
作者: 鸡脑壳    时间: 2015-4-20 22:14
itheima_llt 发表于 2015-4-20 00:31
不错啊,加油

谢谢,加油!
作者: 鸡脑壳    时间: 2015-4-20 22:17
Imtonoo 发表于 2015-4-20 00:40
天啊 ,太厉害了

。。。
我觉得写程序就是要把复杂的事情简单化就好了
作者: 鸡脑壳    时间: 2015-4-20 22:18
懒的呼吸 发表于 2015-4-20 09:00
二维数据基本不会用……

是在实际程序里面 不需要用么?
我都不懂,以后什么要用什么不要用。。。
作者: 鸡脑壳    时间: 2015-4-20 22:19
若果每天都努力 发表于 2015-4-20 09:39
厉害,因为做过这个题,所以表示佩服。

谢谢
一起努力加油!
作者: kolyneh    时间: 2015-4-20 23:02
不错不错,~
作者: kayaking    时间: 2015-4-20 23:10
厉害哟!
作者: thoris    时间: 2015-4-20 23:29
最后打印有点看不懂    拿来自己试试
作者: 鸡脑壳    时间: 2015-4-20 23:45
thoris 发表于 2015-4-20 23:29
最后打印有点看不懂    拿来自己试试

就是判断 存储的值的大小区间 ,然后加空格的个数
觉得打不了多少,只是用来做演示的,就只设置在了四位数的范围以内了
作者: zhu405557524    时间: 2015-4-20 23:45
路过,学习一下
作者: 鸡脑壳    时间: 2015-4-20 23:47
kayaking 发表于 2015-4-20 23:10
厉害哟!

共勉!
加油!!!
作者: 鸡脑壳    时间: 2015-4-20 23:49
kolyneh 发表于 2015-4-20 23:02
不错不错,~

谢谢~
加油!
作者: 黄文昭    时间: 2015-4-21 00:01
真的牛!
作者: Zack    时间: 2015-4-21 12:16
厉害,学习了
作者: 有无相生    时间: 2015-4-21 12:37
很厉害。学习了
作者: 冯林01    时间: 2015-4-21 13:02
牛。学习了。
作者: 黑夜的触手    时间: 2015-4-21 13:32
好厉害,学习一下
作者: 自然╰→而然    时间: 2015-4-21 13:50
完全看不懂
作者: itheima_llt    时间: 2015-4-21 15:56
做做看哦,谢谢提供
作者: leeshaodong    时间: 2015-4-21 16:26
确实厉害 。
作者: JRT    时间: 2015-4-21 16:46
这个我也做出来了,思路都差不多
作者: 有你好看    时间: 2015-4-21 16:56
这么666666666666666
作者: lslkkk    时间: 2015-4-21 18:07
不错不错
作者: itheima_llt    时间: 2015-4-21 19:01
找到好贴不容易,我顶你了,谢了
作者: 懒的呼吸    时间: 2015-4-21 20:43
鸡脑壳 发表于 2015-4-20 22:18
是在实际程序里面 不需要用么?
我都不懂,以后什么要用什么不要用。。。 ...

这个不知道。不过应该会用集合把?我纯猜测
作者: 付长云    时间: 2015-4-21 21:23
还没有学到
作者: SeventhMoon    时间: 2015-4-21 21:48
数组还没学,悲剧
作者: godrick007    时间: 2015-4-21 21:52
厉害啊,这个螺旋阵挺难理解的
作者: 燕赵之风    时间: 2015-4-21 21:56
不错,其实办法都是人想出来的。不错不错!
作者: 王善辉    时间: 2015-4-22 23:09
大神,求带
作者: gc278161209    时间: 2015-4-22 23:41
找这个很久了  拿走了 谢谢!!!!
作者: li514620797    时间: 2015-4-22 23:44
点赞,,,真厉害
作者: 鸡脑壳    时间: 2015-4-23 00:39
王善辉 发表于 2015-4-22 23:09
大神,求带

我是谢恒曦 0.0   用平常练得换黑马笔的 0.0
作者: q8387811    时间: 2015-4-23 00:41
赞一个。。
作者: 王善辉    时间: 2015-4-23 21:29
鸡脑壳 发表于 2015-4-23 00:39
我是谢恒曦 0.0   用平常练得换黑马笔的 0.0

你这死胖子,居然还匿名
作者: xuelanghu120    时间: 2015-4-23 22:35
一会学习下
作者: 大西洋    时间: 2015-4-23 23:10
你真牛~
作者: 鸡脑壳    时间: 2015-4-24 00:21
王善辉 发表于 2015-4-23 21:29
你这死胖子,居然还匿名

我什么匿名 0.0  这我扣扣登的,名字都没让取,直接就给我取了。。。
作者: JRT    时间: 2015-4-25 15:29
我做过,同感,赞一个
作者: fanyun2009    时间: 2015-4-25 15:44
牛人!!!佩服!!
作者: dengxing    时间: 2015-4-25 19:32
必须得赞!!!
作者: 18561271203    时间: 2015-4-25 21:57
牛人,没看懂,有点复杂
作者: 乘梦而飞    时间: 2015-4-25 22:49
感谢楼主分享,赞一个
作者: 梦逆光377    时间: 2015-4-25 22:52
  均视为扰乱本期活动,给予禁言处理
作者: 1017161726    时间: 2015-4-26 15:03
我试试只用二维数组解这道题,而且不一定是正方,长方形矩阵也可以。
作者: 蓝墨清幽    时间: 2015-4-26 15:07
确实不错,赞啊。
作者: Chans_宇    时间: 2015-4-26 18:22
昨晚看了,也写了个{:3_63:}
作者: winelx    时间: 2015-4-26 22:10
完全看不懂的样子
作者: 黄文昭    时间: 2015-4-26 22:23
真牛逼啊,大神级别的存在!
作者: bboyXiaoNuo    时间: 2015-4-26 22:30
真是厉害,希望有一天也能这么厉害
作者: 哔哩哔哩    时间: 2015-4-26 23:57
赞一个        
作者: 乘梦而飞    时间: 2015-4-27 22:19
学习了~~~~~~
作者: lai19    时间: 2015-4-27 22:29
完全看不懂
作者: 唐禹龙90    时间: 2015-4-27 22:56
你输入 5,8或者8,5 是正确的么




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2