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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 感觉 中级黑马   /  2015-3-12 01:59  /  786 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.Scanner;
class LuoXuanDemo02
{
        static int x = 0;                                                        //行
        static int y = 0;                                                        //列
                                                                                        //行和列用于确定数据要存入的角标
        static int[][] arr;
        static int count = 0;                                                //计数器,记录排好的数的个数,用于判断是否要跳出循环
        public static void main(String[] args)
        {
                Scanner sc = new Scanner(System.in);
                int num = sc.nextInt();                                        //键盘录入一个int型数字
                bianLi(luoXuan(num));
        }
        public static int[][] luoXuan(int num)
        {
                int shang = num;                                                //上长度,用来确定角标,每循环一次后减去1
                int you = num - 1;                                                //右长度,用来确定角标,每循环一次后减去1
                int ceng = 0;                                                        //定义初始层为0而不是1,是为了方便操作角标
                arr = new int[num][num];
                while (true)
                {

                                for (;y < shang ;y++ )                        //判断是否小于上边
                                {
                                        fuZhi();                                        //调用方法给数组赋值
                                }
                                y--;                                                        //将循环后多加的一次减回去,避免下面语句在进行赋值时出现角标越界。
                                x++;
                       

                                for (;x <= you ;x++ )                        //判断是否小于上边右边
                                {
                                        fuZhi();                                        //调用方法给数组赋值
                                }
                                x--;                                                        //将循环后多加的一次减回去,避免下面语句在进行赋值时出现角标越界。
                                y--;

                                for (; y >= ceng ;y-- )                        //判断y是否小于等于层
                                {
                                        fuZhi();                                        //调用方法给数组赋值
                                }
                                y++;                                                        //将循环后多减去的一次加回去,避免下面语句在进行赋值时出现角标越界。
                                x--;

                                for (; x > ceng ;x-- )                        //判断y是否小于层
                                {
                                        fuZhi();                                        //调用方法给数组赋值
                                }
                                x++;                                                        //将循环后多减去的一次加回去,避免下面语句在进行赋值时出现角标越界。
                                y++;
                        ceng++;                                                                //层加加
                        shang-=1;                                                        //上减减
                        you-=1;                                                                //右减减
                        if(count >= arr.length*arr.length)                       //如果数组已经排满就跳出循环
                                break;
                }
                return arr;                                                                //结束方法返回数组
        }
        public static void fuZhi()
        {
                if(!(count >= arr.length*arr.length))                //只要排好的数的个数没超出给定数的平方(也就是数组还没满)
                        arr[x][y] = ++count;                                //就给该角标赋值,反之如果已满,就不再赋值
        }
        public static void bianLi(int[][] arr)                       //遍历二维数组
        {
                for (int i = 0;i < arr.length ;i++ )
                {
                        for (int j = 0;j < arr.length ;j++ )
                        {
                                System.out.print(arr[i][j]+"\t");
                        }
                        System.out.println();
                }
        }
}


8{]7W3SO1HUIU]A@0K)3A(H.png (3.76 KB, 下载次数: 1)

8{]7W3SO1HUIU]A@0K)3A(H.png

LuoXuanDemo02.zip

1.13 KB, 下载次数: 26

评分

参与人数 1黑马币 +20 收起 理由
枪杆不如笔杆 + 20 很给力!

查看全部评分

1 个回复

倒序浏览
第一次发这类贴,不太知道格式,希望还能看得过去:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马