黑马程序员技术交流社区

标题: 练习题求解 [打印本页]

作者: pigdanny    时间: 2016-7-7 08:43
标题: 练习题求解
import java.util.Scanner;

/*
* 需求:        7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
*          如: n = 4 则打印:
                1  2  3  4
                12 13 14 5
                11 16 15 6
                10 9  8  7

        分析:        先给二维数组赋值
                        每一圈:
                                顶行>右列>底行>左列
                        由外圈向内圈
       
                然后打印二维数组
                       
* */
public class Test7
{
       
       
        public static void main(String[] args)
        {
                //从键盘输入二维数组的长度,也就是矩阵的边长
                System.out.println("请指定二维数组的长度");
                int length=new Scanner(System.in).nextInt();
                //校验数组长度
                if(length==0)
                {
                        System.out.println("二维数组的长度不能定为0");
                        return;
                }
                //创建二维数组
                int[][] array=new int[length][length];
                //计算矩阵的圈数
                int qs=(length+1)/2;
                //设定第一个元素的值
                int start=1;
                //设定行坐标
                int i=0;
                //设定列坐标
                int j=0;
                //由外层循环来控制圈数
                for(int x=0;x<qs;x++)
                {
                        //顶行,从左到右,行不变,列递增
                        for(j=x;j<length-x-1;j++)
                                array[i][j]=start++;
                        //右列,从上到下,列不变,行递增
                        for(i=x;i<length-x-1;i++)
                                array[i][j]=start++;
                        //底行,从右到左,行不变,列递减
                        for(j=length-i-1;j>0;j--)
                                array[i][j]=start++;
                        //左列,从下到上,列不变,行递减
                        for(i=length-i-1;i>0;i--)
                                array[i][j]=start++;
                }
               
                //打印二维数组
                //控制行数
                for(i=0;i<length;i++)
                {
                        //打印一行上的元素
                        for(j=0;j<length;j++)
                                System.out.print(array[i][j]+"\t");
                        //换行
                        System.out.println("\n\n");
                }
        }

}

我的螺旋矩阵打印出来是这样的,谁帮我找出问题所在.
---------------------------------------------
请指定二维数组的长度
2
1        2       


0        0       

作者: cat73    时间: 2016-7-7 08:51
http://bbs.itheima.com/thread-224780-1-1.html
我曾经写过一个,不过是 JavaScript 的,基本逻辑应该差不多的。
作者: 新人—小明同学    时间: 2016-7-7 09:00
不懂给顶.{:2_41:}.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2