黑马程序员技术交流社区
标题:
练习题求解
[打印本页]
作者:
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