黑马程序员技术交流社区
标题:
来来来, 都看看这个二维数组的打印问题
[打印本页]
作者:
王凯路路
时间:
2014-8-26 19:01
标题:
来来来, 都看看这个二维数组的打印问题
写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
实在是想不出来该怎么弄, 请大神帮忙
作者:
idency
时间:
2014-8-26 21:10
额 ,这个也是我的入学测试题!贴出来我的给你参考下吧!
package com.itheima;
/**
* 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
* 1 2 3 4
* 12 13 14 5
* 11 16 15 6
* 10 9 8 7
*
*思路:
*1.定义一个二维数组,请arr用来接收要打印的数据
*2.打印该螺旋方式,可以将螺旋看成是多次循环,每次循环的开始位置都是a[0][0] a[1][1] a[2][2]...
*3.只需根据给定的n的值确定循环次数即可,循环次数为(n+1)/2
*4.另外需要确定每次开始位置的值,随后按照螺旋顺序让对应角标值递增即可
*5.遍历数组并按要求打印
*
*
*/
public class Test9 {
public static void main(String[] args) {
//定义变量n用来表示需要打印的数组的大小
int n = 15;
//定义print()方法,用来完成数组内容的确定并打印
print(n);
}
public static void print(int n) {
//定义一个int型数组,用来接收需要打印的数据
int[][] arr = new int[n][n];
//定义int型变量count,用来表示螺旋数组循环的次数
int count = (n + 1) / 2;
//确定每个循环开始出的初始值a[0][0] a[1][1] a[2][2]...
arr[0][0] = 1;
for (int i = 1; i < count; i++) {
arr[i][i] = arr[i - 1][i - 1] + ((n - (i - 1) * 2) * 2 - 2) * 2;
}
//使用for循环,依次循环确定每次回环上的对应角标的值
for (int i = 0; i < count; i++) {
//该循环用于确定每次回环上上边缘数据
for (int j = i + 1; j < arr.length - i; j++) {
arr[i][j] = arr[i][j - 1] + 1;
}
//该循环用于确定每次回环上右边缘的数据
for (int j = i + 1; j < arr.length - i; j++) {
arr[j][arr.length - i - 1] = arr[j - 1][arr.length - i - 1] + 1;
}
//该循环用于确定每次回环上下边缘的数据
for (int j = arr.length - i - 2; j >= 0 + i; j--) {
arr[arr.length - i - 1][j] = arr[arr.length - i - 1][j + 1] + 1;
}
//该循环用于确定每次回环上左边缘的数据
for (int j = arr.length - i - 2; j > 0 + i; j--) {
arr[j][i] = arr[j + 1][i] + 1;
}
}
//使用for循环获得一维数组
for (int i = 0; i < arr.length; i++) {
int[] js = arr[i];
//使用for循环获取每个一维数组中的元素,并按要求打印
for (int j = 0; j < js.length; j++) {
System.out.print(js[j] + "\t");
}
//每次打印完成一个一维数据后进行换行
System.out.println();
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2