黑马程序员技术交流社区
标题:
写一方法,打印等长的二维数组,要求从 1 开始的自然数...
[打印本页]
作者:
pegasus
时间:
2015-11-17 17:08
标题:
写一方法,打印等长的二维数组,要求从 1 开始的自然数...
/**
* @Description 打印螺旋矩形
*
* @author Amos.young
* @date 2015年11月17日
*/
public class ArrayPrint {
private int N; // 矩形的维数
private int[][] array;
public ArrayPrint() {
N = 5;
array = new int[N][N];
}
public ArrayPrint(int n) {
N = n;
array = new int[N][N];
}
public void print() {
int i = 0, j = 0, i0 = 0, j0 = 0, count = 1, num = N - 1;
while (num > 0) {
for (i = i0, j = j0; j < num; j++, count++) {
array[i][j] = count;
}
for (i = i0; i < num; i++, count++) {
array[i][j] = count;
}
for (j = num; j > i0; j--, count++) {
array[i][j] = count;
}
for (i = num; i > i0; i--, count++) {
array[i][j] = count;
}
i0++;
j0++;
num--;
}
if (N % 2 != 0) {
array[N / 2][N / 2] = count;
}
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
String ar = "0";
if (array[i][j] / 10 < 1)
ar = "\t" + array[i][j];
else if (array[i][j] / 100 < 1 && array[i][j] / 10 >= 1)
ar = "\t" + array[i][j];
System.out.print(ar + "\t");
}
System.out.println();
System.out.println();
}
}
public static void main(String[] args) throws IOException {
int order = 0;
System.out.println("Please input the order of the square:(< 10)");
order = System.in.read();
order = order - '0';
ArrayPrint arrayPrint = new ArrayPrint(order);
arrayPrint.print();
}
}
复制代码
作者:
pegasus
时间:
2015-11-17 17:11
/**
* @Description 打印等长的二维数组,要求从 1 开始的自然数由方阵的最外圈向内螺旋方式地顺序排序。
*
* @author Amos.young
* @date 2015年10月28日
*/
public class ArrayPrint {
/**
* 打印示例
* 1 2 3 4
* 12 13 14 5
* 11 16 15 6
* 10 9 8 7
*
* 思路
* 1.观察方阵的规律,每一圈左上角的数字是最小的设为 min,每一圈有 (n-1)*4 个数字,圈数设为 count。
* 2.可以做一个循环,给最外的一圈赋值,然后递归给里的一圈赋值,知道n=1或n=0为止
*/
public static void main(String[] args) {
int n = 4;
int[][] arr = new int[n][n];
int min = 1;
int count = 0;
setNum(n, arr, min, count);
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
private static void setNum(int n, int[][] arr, int min, int count) {
for (int i = 0; i <= (n - 1) * 4; i++) {
if (n == 0) { // 循环结束,n为偶数的情况
break;
}
if (n == 1) { // 循环结束, n为奇数的情况
arr[count][count] = min;
break;
}
// n-1个为一组,一共赋值4组
if (i < n - 1) { // 第一组,向右赋值
arr[count][count + i % (n - 1)] = min++;
} else if (i < (n - 1) * 2) { // 第二组,向下赋值
arr[count + i % (n - 1)][count + n - 1] = min++;
} else if (i < (n - 1) * 3) { // 第三组,向左赋值
arr[count + n - 1][count + n - 1 - i % (n - 1)] = min++;
} else if (i < (n - 1) * 4) { // 第四组,向上赋值
arr[count + n - 1 - i % (n - 1)][count] = min++;
} else {
// 当一圈赋值完毕,圈数加一,边长减二,递归调用
setNum(n - 2, arr, min, ++count);
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2