用java输出一个方阵,其中的数螺旋向内增大

1.我们要做到的就是用代码实现如下图片的输出

输入1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输入一个数输出一个类似于上面的螺旋增大的方阵。

2.先分析一下我的主要思路

第一行先行输出
先把第一行用for循环输出,此时行数 r =1,列数c=5
在这里插入图片描述
再输出这两个每组四个数的列和行,因为紧接着输出完5后此时应该保持行数 r 变大,列数 c 不变,我设此时的flag=true,表示现在应该进行先向下再向左的渐进增大。
在这里插入图片描述
然后输出这两个每组三个数的列和行,因为紧接着输出完13后此时应该保持行数r变小,列数c不变,我设此时的flag=false,表示现在应该进行先向上再向右的渐进增大。
在这里插入图片描述
同每组四个数那样两个数输出。
在这里插入图片描述
同每组三个数那样一个数输出。

3.下面是代码

import java.util.Scanner;

public class Xuan {
	private int[][] list = new int[100][100];    //方阵的最大尺寸是100
	private int n;          //输入的整数
	private int r,c;        //行数列数
	private boolean flag;   //下面会解释
	int count=0;            //count的值从0到n的平方
	
	public Xuan(){          //构造函数
		getN();             //获得方阵的阶数
		List();              //主要的功能实现模块
		onputList();         //输出方阵函数
	}
	
	public void List(){     //主要的功能实现模块
		r=1;                   //起始时先输出第一行
		c=0;            
		for(int i = 0 ;i<n;i++){       //先输出第一行的n个数
			count++;                   
			list[r-1][c]=count;          //每移动一个位置就把当前的count值赋给该位置
			c++;                         //行数不变,列数每次移动+1
		}
		flag=true;         //表示应该进行先向下再向左的渐进增大               
		for(int l = n-1;l>0;l--){             
			//l=3;
			if(flag){                    //先向下再向左的渐进增大
				for(int m = 0;m<l;m++){     
					r++;             
					count++;         
					list[r-1][c-1]=count;
				}
				for(int n = 0;n<l;n++){      
					c--;                  
					count++;                
					list[r-1][c-1]=count;
				}
				flag=false;            //结束后改变flag的值
				continue;              //进行下一次循环
			}
			if(!flag){                  //先向上再向右的渐进增大
				for(int o = 0;o<l;o++){
					r--;
					count++;
					list[r-1][c-1]=count;
				}
				for(int p = 0;p<l;p++){
					c++;
					count++;
					list[r-1][c-1]=count;
				}
				flag=true;
				continue;
			}
		}
	}
	
	public void onputList(){                   //输出方阵函数
		for(int j =0;j<n;j++){
			for(int k = 0;k<n;k++){
				System.out.print(list[j][k]+" ");
			}
			System.out.println();
		}
	}
	
	public void getN(){                //获得方阵的阶数
		System.out.print("请输入一个整数:");
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();
		scan.close();
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Xuan();
	}

}

下面是阶数1~6的运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值