黑马程序员技术交流社区
标题:
一个感觉很屌的小循环,看了半天也没看懂,有哪位大神可以简化一点........
[打印本页]
作者:
xiguapi
时间:
2016-9-2 22:16
标题:
一个感觉很屌的小循环,看了半天也没看懂,有哪位大神可以简化一点........
写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
package com.itheima;
public class Test9 {
public static void main(String[] args){
//定义数组的长度
int len = 10;
//调用得到螺旋数组的方法
int[][] arys = getSpiralArray(len);
//用for循环嵌套,对数组进行遍历输出
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
{
System.out.print(arys[i][j] + "\t");
}
System.out.println();
}
}
public static int[][] getSpiralArray(int length) {
//定义一个等长度的数组
int[][] array = new int[length][length];
int upcol = 0;
//向右走列数
int leftRow = 0;
//记录最后一行的变量
int downCol = length-1;
//记录最后一列的变量
int rightRow = length-1;
int num = 1;
while(length > 0){
//向右走,循环遍历,并把得到的值添加到数组中
for(int i = 0, temp = leftRow; i < length; i++){
//第一行,打印向右走,随着列数的的自增1,第一行的元素也随着自增1
array[upcol][temp++] = num++;
}
//向下走,循环遍历,并把得到的值添加到数组中
for(int i = 0, temp = leftRow+1; i < length-1; i++){
//最后一列,打印向下走,随着行数的自增1,最后一列的元素也自增1
array[temp++][downCol] = num++;
}
//向左走 ,循环遍历,并把得到的值添加到数组中,是从length-1列的最后一个元素开始,所以是rightRow-1
for(int i = 0, temp = rightRow-1; i < length-1; i++){
//最后一行,打印向左走,随着列数的自减1,最底层的元素自增1
array[downCol][temp--] = num++;
}
//向上走,循环遍历,并把得到的值添加到数组中 ,是从length-1行的最后一个元素开始,所以是downCol-1
for(int i = 0, temp =downCol-1; i< length-2; i++){
//最左边一列,向上打印,随着行数的自减1,最左边的一列中的元素自增1
array[temp--][upcol] = num++;
}
//再往里边依次循环,直到打印到最后的一个数就是length的平方
//每打印最外面的一圈,内圈的长度减少2
length = length - 2;
//向右走的行数增加1,也就是说第二轮循环是从第二行、第二列、length-1行、length-1列
upcol++;
leftRow++;
downCol--;
rightRow--;
}
return array;
}
}
作者:
xiguapi
时间:
2016-9-2 22:17
看的好乱,看不懂......
作者:
584444948
时间:
2016-9-2 22:24
我表示也看不懂
作者:
markiyangliu
时间:
2016-9-2 23:04
好乱 ,表示不想看,不过我也是很差,应该不会。不过有个建议:稍微搞工整一点,大神也会愿意看点。
作者:
YaoDoctor
时间:
2016-9-3 18:15
真的不好看,好乱
作者:
岳阳天
时间:
2016-9-8 23:51
private static void method(int[][] arr) {
int i = 0;
int j = 0;
int max = arr.length -1;
int min = 0;
int num = 1;
while(min<=max){
while(j<max){
arr[i][j++] = num++;
}
while(i<max){
arr[i++][j] = num++;
}
while (j>min){
arr[i][j--] = num++;
}
while (i>min){
arr[i--][j] = num++;
}
if(min ==max){
arr[i][j]= num;
}
max --;
min ++;
j++;
i++;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2