Java编写的“回型”数组与输出

Java萌新,第一次自己编写的“回型”数组,怕忘了,赶紧记下来,后面有机会再优化吧

···代码中定义数组大小的  “m”,可用Scanner类的方法改为键盘输入,就可以实现任意大小的回型数组了

public class HuiXingArray {
    public static void main(String[] args) throws Exception {

        //制作回型数组
        int m = 5;//行列数(m大的大小决定回型数组的大小)
        int r = 0;//行标
        int l = 0;//列标
        int xs = m;//限定行升变量
        int ys = m;//限定列升变量
        int xj = 0;//限定行降变量
        int yj = 0;//限定列降变量
        int sum = 0;//赋值变量

        int[][]arr = new int[m][m];
       Label: while (true){
                //升列
                for (; l < ys; l++) {
                    if (sum >= m*m){//结束数组赋值的条件
                        break Label;
                    }
                    sum++;
                    arr[r][l] = sum;
                }
                ys--;//当次升列结束,为下次升列初始化次数
                r++;//升列结束,提前升一行位,给下面升行初始化行位置
                l--;//升列结束后,列位置为已赋值列位,防止下面升行时覆盖,先要降列一位,为下面升行初始化列位
                //升行
                for ( ;r < xs; r++) {
                    if (sum >= m*m){//结束数组赋值的条件
                        break Label;
                    }
                    sum++;
                    arr[r][l] = sum;
                }
                xs--;//当次升行结束,为下次升行初始化次数
                l--;//升行结束,提前降一列位,给下面降列初始化列位置
                r--;//升行结束后,行位置为已赋值行位,防止下面降列时覆盖,先要降行一位,为下面降列初始化行位

                //降列
                for (; l >= yj; l--) {
                    if (sum >= m*m){//结束数组赋值的条件
                        break Label;
                    }
                    sum++;
                    arr[r][l] = sum;
                }
                yj++;//当次降列结束,为下次降列初始化次数
                r--;//降列结束,提前降一位,给下面降行初始化行位置
                l++;//降列结束条件( l--与l >= yj) ,导致多降了一列,回升一列,为下步降行初始化列位置
                //降行

                for (; r > xj; r--) {
                    if (sum >= m*m){//结束数组赋值的条件
                        break Label;
                    }
                    sum++;
                    arr[r][l] = sum;
                }
                xj++;//降行结束,为下次降行初始化降行次数
                r++;//降行结束条件 r--,导致多降了行,回升一行,为下步升列初始化位置
                l++;//降行结束,升一位列,为下步升列初始化位置
        }

        //输出回型数组元素
        for (int e = 0; e < arr.length; e++) {
            for (int f = 0; f < arr[e].length; f++) {
                System.out.print(arr[e][f] + "\t");
            }
            System.out.println();
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值