【Java】回形数

回形数

键盘读入一个整数n(1-20),以n为矩阵大小,把1,2,3,4,5…按顺时针螺旋的形式填入。

【Java】回形数_第1张图片
import java.util.Scanner;

public class HuiXingShu {
	public static void main(String[] args) {
		System.out.print("请输入一个整数:");
		int lenth;
		Scanner scanner = new Scanner(System.in);
		lenth = scanner.nextInt();
		int[][] array = new int[lenth][lenth];
		int direction = 1;//判断方向,1从左往右,2从上往下,3从右往左,4从下往上。
		int i = 0;
		int j = 0;
		int k;
		for(k = 1;k <= lenth * lenth;k++) {
			if(direction == 1) {
				if(j < lenth && array[i][j] == 0)//不能先判断数组中元素是否为零,可能会越界
					array[i][j++] = k;
				else {
					direction = 2;//更换方向为从上到下
					k--;//这个数没有赋给数组,过了这轮循环又会加一,所以先减一
					i++;//这一行已经填满数,往下挪一行
					j--;//下标已经越界,往回挪一列
				}
			}
			else if(direction == 2) {
				if(i < lenth && array[i][j] == 0)//不能先判断数组中元素是否为零,可能会越界
					array[i++][j] = k;
				else {
					direction = 3;//更换方向为从右到左
					k--;//这个数没有赋给数组,过了这轮循环又会加一,所以先减一
					j--;//这一列已经填满数,往左挪一列
					i--;//下标已经越界,往上挪一行
				}
			}
			else if(direction == 3) {
				if(j >= 0 && array[i][j] == 0)//不能先判断数组中元素是否为零,可能会越界
					array[i][j--] = k;
				else {
					direction = 4;//更换方向为从下到上
					k--;//这个数没有赋给数组,过了这轮循环又会加一,所以先减一
					i--;//这一行已经填满数,往上挪一行
					j++;//下标已经越界,往回挪一列
				}
			}
			else if(direction == 4) {
				if(i >= 0 && array[i][j] == 0)//不能先判断数组中元素是否为零,可能会越界
					array[i--][j] = k;
				else {
					direction = 1;//更换方向为从左到右
					k--;//这个数没有赋给数组,过了这轮循环又会加一,所以先减一
					j++;//这一列已经填满数,往右挪一列
					i++;//下标已经越界,往下挪一行
				}
			}
		}
		//遍历输出
			for(int[] x : array) {
				for(int y : x)
					System.out.printf("%3d",y);
				System.out.println();
			}
	}
}

你可能感兴趣的:(Java,java)