题目:
测试系统输入行n,列m,和二维数组,从arr[0][0]开始逆时针输出元素,输出过的元素就不再输出
输入输出
解题思路:
1,用写死的数据去实现样例的输入,看能否发现规律
2,当写到输出第二个left的时候可以感受到如果二维数组的行和列如果再增大,还会有次外圈的存在,同样的也是要输出left,down,right,top
3,猜想从最外圈,次外圈,次次外圈数量(定义变量count)的增长是否会和每次输出 left,down,right,top 有关系;可以通过第2个left去发现这个关系,在left循环输出中的初始值和终止值,输出元素的获取其实都能够和 count 联系起来,也能够通过观察图形去找这个联系,用count表达式替换了写死数据的left输出去验证联系的正确性
4,当n,m增大时,times相应的也会增大,考虑用while循环去取全部的数,打印一圈(left,down,right,top)后 times = time + 1
5,既然使用while那么什么时候去终止循环呢?
方法一:使用sum变量记录输出元素的次数,当 次数==二维数组中所有元素个数 的时候就表示已经全部输出了,跳出循环;注意是跳出2重循环(还有更优雅的跳出2重循环的方式)
代码:
1,通过写死数据的形式输出样例
public void testArray() {
int [][] arr = {
{1,2,3},
{4,5,6},
{7,8,9}};
//left
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i][0] + " ");
}
//down
int [] down = arr[arr.length -1];
for (int i = 1; i < down.length; i++) {
System.out.print(down[i] + " ");
}
//right 倒序输出数组
for (int i = arr.length -2; i >= 0 ; i--) {
System.out.print(arr[i][2] + " ");
}
//top
int [] top = arr[0];
for (int i = top.length -2; i >= 1; i--) {
System.out.print(top[i] + " ");
}
//left2
for (int i = 1; i < arr.length -1; i++) {
System.out.print(arr[i][1] + " ");
}
}
2,将打印语句中写死的数据用count进行替换
public void test2() {
int[] arr[] = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };
int total = 12; //数组中元素总数量
int sum = 0; //记录输出的总数量
int count = 0; //记录循环到第几圈了
while (true) {
// left
for (int i = count; i < arr.length - count; i++) {
System.out.print(arr[i][count] + " ");
sum ++;
if (sum == total) {
break;
}
}
if (sum == total) {
break;
}
// down
int[] arrDown = arr[arr.length - (count + 1)];
for (int i = (count + 1); i < arrDown.length -count ; i++) {
System.out.print(arrDown[i] + " ");
sum ++;
if (sum == total) {
break;
}
}
if (sum == total) {
break;
}
// right
for (int i = arr.length - (count + 2); i >= count; i--) {
System.out.print(arr[i][arr[i].length - (count + 1)] + " ");
sum ++;
if (sum == total) {
break;
}
}
if (sum == total) {
break;
}
// top
int [] arrTop = arr[count];
for (int i = arrTop.length - (count + 2); i > count; i--) {
System.out.print(arrTop[i] + " ");
sum ++;
if (sum == total) {
break;
}
}
if (sum == total) {
break;
}
count ++;
}
}