Java萌新,第一次自己编写的“回型”数组,怕忘了,赶紧记下来,后面有机会再优化吧
···代码中定义数组大小的 “m”,可用Scanner类的方法改为键盘输入,就可以实现任意大小的回型数组了
public class HuiXingArray {
public static void main(String[] args) throws Exception {
//制作回型数组
int m = 5;//行列数(m大的大小决定回型数组的大小)
int r = 0;//行标
int l = 0;//列标
int xs = m;//限定行升变量
int ys = m;//限定列升变量
int xj = 0;//限定行降变量
int yj = 0;//限定列降变量
int sum = 0;//赋值变量
int[][]arr = new int[m][m];
Label: while (true){
//升列
for (; l < ys; l++) {
if (sum >= m*m){//结束数组赋值的条件
break Label;
}
sum++;
arr[r][l] = sum;
}
ys--;//当次升列结束,为下次升列初始化次数
r++;//升列结束,提前升一行位,给下面升行初始化行位置
l--;//升列结束后,列位置为已赋值列位,防止下面升行时覆盖,先要降列一位,为下面升行初始化列位
//升行
for ( ;r < xs; r++) {
if (sum >= m*m){//结束数组赋值的条件
break Label;
}
sum++;
arr[r][l] = sum;
}
xs--;//当次升行结束,为下次升行初始化次数
l--;//升行结束,提前降一列位,给下面降列初始化列位置
r--;//升行结束后,行位置为已赋值行位,防止下面降列时覆盖,先要降行一位,为下面降列初始化行位
//降列
for (; l >= yj; l--) {
if (sum >= m*m){//结束数组赋值的条件
break Label;
}
sum++;
arr[r][l] = sum;
}
yj++;//当次降列结束,为下次降列初始化次数
r--;//降列结束,提前降一位,给下面降行初始化行位置
l++;//降列结束条件( l--与l >= yj) ,导致多降了一列,回升一列,为下步降行初始化列位置
//降行
for (; r > xj; r--) {
if (sum >= m*m){//结束数组赋值的条件
break Label;
}
sum++;
arr[r][l] = sum;
}
xj++;//降行结束,为下次降行初始化降行次数
r++;//降行结束条件 r--,导致多降了行,回升一行,为下步升列初始化位置
l++;//降行结束,升一位列,为下步升列初始化位置
}
//输出回型数组元素
for (int e = 0; e < arr.length; e++) {
for (int f = 0; f < arr[e].length; f++) {
System.out.print(arr[e][f] + "\t");
}
System.out.println();
}
}
}