回形数格式方阵功能实现:
代码如下:
第一种方法:
//输出回形数
import java.util.Scanner;
public class HuiXingShuTest {
public static void main(String[] args) {
System.out.print("请输入一个数:");
Scanner scan = new Scanner(System.in);
//从键盘获取一个数
int num = scan.nextInt();
int k = 1;//先让数组赋值向右依次赋值
int i = 0,j = 0;
//初始化数组
int[][] arr = new int[num][num];
//使m依次从1到num*num自增
for(int m = 1;m <= num * num;m++) {
/*
* k = 1:向右 k = 2:向下 k = 3:向左 k = 4:向上
* 依次按顺时针方向以回字形给元素赋值
*/
//向右给数组赋值
if(k == 1) {
//判断数组内元素角标是否超过最大值,以及元素是否已赋值
if(j < num && arr[i][j] == 0) {
arr[i][j++] = m;//给各元素赋值
}else {//若内元素角标超过最大值,则向下赋值
k = 2;
i++;
j--;
m--;
}
}else if(k == 2) {//向下给数组赋值
//判断数组外元素角标是否超过最大值,以及元素是否已赋值
if(i < num && arr[i][j] == 0) {
arr[i++][j] = m;//给各元素赋值
}else {//若外元素角标超过最大值,则向左赋值
k = 3;
i--;
j--;
m--;
}
}else if(k == 3) {//向左给数组赋值
//判断数组内元素角标是否超过最小值,以及元素是否已赋值
if(j >= 0 && arr[i][j] == 0) {
arr[i][j--] = m;//给各元素赋值
}else {//若内元素角标超过最大值,则向上赋值
k = 4;
i--;
j++;
m--;
}
}else if(k == 4) {
//判断数组外元素角标是否超过最小值,以及元素是否已赋值
if(i >= 0 && arr[i][j] == 0) {
arr[i--][j] = m;//给各元素赋值
}else {//若外元素角标超过最大值,则向右赋值
k = 1;
i++;
j++;
m--;
}
}
}
//遍历数组
for(int l = 0;l < arr.length;l++) {
for(int n = 0;n < arr[l].length;n++) {
System.out.print(arr[l][n] + "\t");
}
System.out.println();
}
}
}
第二种方法:
import java.util.Scanner;
public class HuiXingShuTest2 {
public static void main(String[] args) {
System.out.print("请输入一个数:");
Scanner scan = new Scanner(System.in);
// 从键盘获取一个数
int num = scan.nextInt();
//初始化数组
int[][] arr = new int[num][num];
int count = 0;//要赋值的数据
int maxX = num -1;// x轴最大下标
int maxY = num -1;// y轴最大下标
int minX = 0;// x轴最小下标
int minY = 0;// y轴最小下标
while(minX <= maxX) {
for(int x = minX;x <= maxX;x++) {
arr[minY][x] = ++count;
}
minY++;
for(int y = minY;y <= maxY;y++) {
arr[y][maxX] = ++count;
}
maxX--;
for(int x = maxX;x >= minX;x--) {
arr[maxY][x] = ++count;
}
maxY--;
for(int y =maxY;y >= minY;y--) {
arr[y][minX] = ++count;
}
minX++;
}
//遍历数组
for (int l = 0; l < arr.length; l++) {
for (int n = 0; n < arr[l].length; n++) {
System.out.print(arr[l][n] + "\t");
}
System.out.println();
}
}
}