Java生成九宫格(二维数组的应用)

问题描述:

08  01  06  
03  05  07  
04  09  02 

初始值1,其数组下标为[0][1],依次输入2、3、4、5、6、7、8、9,生成结构如上所示。

构造规则:

从初始位置出发,每次检查当前位置的右上角格子的行列情况:(行减一,列加一)

1、行越界,列正常时;跳到当前列的最后一行,进行赋值。

2、行正常,列越界时;跳到当前行的第一列,进行赋值。

3、行、列都正常时;又分为两种情况:1)该格中无值,则直接赋值;2)该格中有值,则回退到上一格(左下角)的同列下方一格,进行赋值。

4、行、列都不正常时;则回退到上一格(左下角)的同列下方一格,进行赋值。

代码:

package com.FM.Javase.work0824;

import java.util.Scanner;

public class SquaredPaper {
    public static void main(String[] args) {
        int[][] a=new int[3][3];
        int i=0;//行
        int j=1;//列
        int y=1;//已输入的数字个数
        a[i][j]=1;//初始位置
        Scanner sc=new Scanner(System.in);
        while(y<9){
            i-=1;//行回退一格
            j+=1;//列前进一格
            if (i<0&&j<3){//行越界,列正常
                i=2;//回到当前列的最后一行
                System.out.println("请输入下一个数字:");
                a[i][j]=sc.nextInt();//接受数字
                y++;//已输入的数字个数加一
                continue;//结束本次循环
            }else if (i>=0&&j>2){//行正常,列越界
                j=0;//回到当前行的第一列
                System.out.println("请输入下一个数字:");
                a[i][j]=sc.nextInt();//接受数字
                y++;//已输入的数字个数加一
                continue;//结束本次循环
            }if (i>=0&&j<3){//行、列都正常
                if (a[i][j]!=0){//当前位置已有数字
                    i+=2;//行回退到上一个位置的下一行
                    j-=1;//列回退到上一列
                    System.out.println("请输入下一个数字:");
                    a[i][j]=sc.nextInt();//接受数字
                    y++;//已输入的数字个数加一
                    continue;//结束本次循环
                }else{//当前位置没有数字
                    System.out.println("请输入下一个数字:");
                    a[i][j]=sc.nextInt();//接受数字
                    y++;//已输入的数字个数加一
                    continue;//结束本次循环
                }
            }else if (i<0&&j>2){//行、列都不正常
                i+=2;//行回退到上一个位置的下一行
                j-=1;//列回退到上一列
                System.out.println("请输入下一个数字:");
                a[i][j]=sc.nextInt();//接受数字
                y++;//已输入的数字个数加一
                continue;//结束本次循环
            }
        }
        System.out.println("输入完成!");
        for (int m = 0; m < 3; m++) {
            for (int n = 0; n < 3; n++) {
                System.out.print(a[m][n]+"  ");
            }
            System.out.println();
        }
    }
}

运行结果:

 扩展(五行五列)

代码:

package com.FM.Javase.work0824;

public class SquaredPaper01 {
    public static void main(String[] args) {
        int[][] a=new int[5][5];
        int i=0;//行
        int j=2;//列
        a[i][j]=1;//初始位置
        for (int p = 2; p < 26; p++) {
                i-=1;//行回退一格
                j+=1;//列前进一格
                if (i<0&&j<5){//行越界,列正常
                    i=4;//回到当前列的最后一行
                    a[i][j]=p;//接受数字
                    continue;//结束本次循环
                }else if (i>=0&&j>4){//行正常,列越界
                    j=0;//回到当前行的第一列
                    a[i][j]=p;//接受数字
                    continue;//结束本次循环
                }if (i>=0&&j<5){//行、列都正常
                    if (a[i][j]!=0){//当前位置已有数字
                        i+=2;//行回退到上一个位置的下一行
                        j-=1;//列回退到上一列
                        a[i][j]=p;//接受数字
                        continue;//结束本次循环
                    }else{//当前位置没有数字
                        a[i][j]=p;//接受数字
                        continue;//结束本次循环
                    }
                }else if (i<0&&j>4){//行、列都不正常
                    i+=2;//行回退到上一个位置的下一行
                    j-=1;//列回退到上一列
                    a[i][j]=p;//接受数字
                    continue;//结束本次循环
                }
        }
        for (int m = 0; m < 5; m++) {
            for (int n = 0; n < 5; n++) {
                System.out.print(a[m][n]+"    ");
            }
            System.out.println();
        }
    }
}

运行结果:

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值