JAVA九宫格程序

实现功能首先可以观察数字排列规律。

1 2 3 4 5 6 7 8 9,数字以5为中心,首尾相加相等,故在九宫格中排列时只需将首尾数字依次对应排列,且将5放于中间格,观察九宫格。

                                                             

斜看情况下,数字排列按照顺序排列即可,在示例图中,下一位数字(n+1)的 是上一位数字(n)的(行 - 1), 是 (列 + 1)。 遇到 行列 超出数组范围,按照不同情况进行处理,处理过程参考下文代码中的注释。

 



import java.util.Scanner;

public class SumNine {
    public static void main(String[] args){
        int n ;
        boolean mark = true;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入N,N为奇数");
        n = sc.nextInt();
        while (mark){
            if (n % 2 == 0 || n < 0){
                System.out.println("输入的数字小于0或不为奇数,请重新输入");
                n = sc.nextInt();
            }
            else{
                mark = false;
            }
        }
        int[][] arr = new int[n][n];
        // 完成建立N*N的数组,开始填数。1、行超限;2、列超限;3、行列超限;4、下一空缺有数
        // 进行判断需要有先后,只有 行列均不超限 的情况下才能判断数组某个位置是否为空值。 行列均超限时,会同时满足超限的单一条件,故必须放在第一个判断。
        // 否则将无法触发判断条件。
        int a = 0, b = n / 2;
        for (int i = 1; i <= n*n; i++){
            arr[a][b] = i;
//            System.out.println("i 的值为:"+i);
//            System.out.println("ab 的值为:"+ a + "--" + b);
            a--;
            b++;
            //若行列均超限,则列保持上一个数不变,行加一。
            if (a < 0 && b >= n){
                a += 2;
                b--;
            }
            // 若行超限,则移动至最后一行
            else if (a < 0){
                a = n - 1;
            }
            // 若列超限,则移动至第一列
            else if (b >= n){
                b = 0;
            }
            // 或下一目标位置不为空(数组未定义值时,默认为0)
            else if (arr[a][b] != 0){
                a += 2;
                b--;
            }
        }

        // 遍历数组,并输出
        for (int[] c : arr){
            for (int d : c){
                System.out.print(d + "\t");
            }
            System.out.println();
        }
        sc.close();

    }

}

本人JAVA自学新手,本文目的在于加强自我学习,文中有不对之处,请多多指教。

排列方法不限此种,图文仅给出了其中一种解题思路。

代码参考了其他题主,非原创,侵删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值