用java输出一个方阵,其中的数螺旋向内增大
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的运行结果