A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鸡脑壳 中级黑马   /  2015-4-19 23:58  /  2717 人查看  /  60 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

首先贴代码
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-27 23:03

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
小甲鱼 + 1 曦胖子?
lwj123 + 1

查看全部评分

60 个回复

正序浏览
你输入 5,8或者8,5 是正确的么
回复 使用道具 举报
lai19 中级黑马 2015-4-27 22:29:02
58#
完全看不懂
回复 使用道具 举报
学习了~~~~~~
回复 使用道具 举报
赞一个        
回复 使用道具 举报
真是厉害,希望有一天也能这么厉害
回复 使用道具 举报
真牛逼啊,大神级别的存在!
回复 使用道具 举报
完全看不懂的样子
回复 使用道具 举报
昨晚看了,也写了个{:3_63:}
回复 使用道具 举报
蓝墨清幽 来自手机 中级黑马 2015-4-26 15:07:56
51#
确实不错,赞啊。
回复 使用道具 举报
我试试只用二维数组解这道题,而且不一定是正方,长方形矩阵也可以。
回复 使用道具 举报
  均视为扰乱本期活动,给予禁言处理
回复 使用道具 举报
感谢楼主分享,赞一个
回复 使用道具 举报
牛人,没看懂,有点复杂
回复 使用道具 举报
必须得赞!!!
回复 使用道具 举报
牛人!!!佩服!!
回复 使用道具 举报
JRT 中级黑马 2015-4-25 15:29:32
44#
我做过,同感,赞一个
回复 使用道具 举报
王善辉 发表于 2015-4-23 21:29
你这死胖子,居然还匿名

我什么匿名 0.0  这我扣扣登的,名字都没让取,直接就给我取了。。。
回复 使用道具 举报
你真牛~
回复 使用道具 举报
一会学习下
回复 使用道具 举报
鸡脑壳 发表于 2015-4-23 00:39
我是谢恒曦 0.0   用平常练得换黑马笔的 0.0

你这死胖子,居然还匿名
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马