A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//这是第二个帖子,第一个帖子的地址是:http://bbs.itheima.com/thread-192515-1-1.html
//在做按自己的思路做完后,发现第四天的作业有螺旋矩阵的作业,看了答案后,发现它的代码很简洁,思路很巧妙
//但是它的功能是任意行列,我希望是任意行,任意列
//经过理解后,自己写了代码,发现当行数跟列数一致的时候不会出问题,行数跟列数不一致的时候有时候可以,有时候不可以
//求大牛帮忙指导下
import java.util.Scanner;
/**
*任意行任意列的内循环螺旋矩阵
*参考有限行列的内循环螺旋矩阵的思路,写出的任意行任意列的内循环螺旋矩阵
*/
class SpiralDemo01
{
public static void main(String []args) {
  Scanner sn=new Scanner(System.in);
  System.out.print("请输入行数:");
  int y=sn.nextInt();
   System.out.print("请输入列数:");
  int x=sn.nextInt();

  int [][]a=new int [x][y];
  LXJZ(a,x,y);
  for(int i=0;i<y;i++) {
   for(int j=0;j<x;j++)
    System.out.print(a[j]+"\t");
   System.out.println();
  }
}
public static void LXJZ(int [][]a,int x,int y) {//螺旋矩阵的方法
   int key=0;
  for(int i=0;i<x+y+1;i++) {//最多走(x+y+2)/4的循环,走一次,则有效范围缩小一次
   
   for(int j=i;j<x-i;j++)//往右走,走到最右角
    if(a[j]==0)a[j]=++key;
   
   for(int j=i+1;j<y-i;j++)//往下走,从最右上角的下面一个数开始走,走到最右下角
   if(a[x-i-1][j]==0) a[x-i-1][j]=++key;
   
   for(int j=x-i-1-1;j>=i;j--)//往左走,从最右下角的左边一个数开始走,走到最左下角
   
   if(a[j][y-i-1]==0) a[j][y-i-1]=++key;
     
   
   
   for(int j=y-i-1-1;j>i;j--)//往上走,从最左下角的上面一个数开始走,走到最左上角的下面一个数【因为最左上角在开头已经走过了】
   if(a[j]==0) a[j]=++key;
   
   
  }

}
}
更多图片 小图 大图
组图打开中,请稍候......

1 个回复

正序浏览
longsee88 发表于 2015-4-29 21:40
0424期学员完全看不懂的路过。。。。

会学会的,加油吧~~~没人帮我找BUG,也是醉啊,秒沉的节奏
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马