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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© RuntimeError! 中级黑马   /  2013-12-7 16:05  /  1044 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

做个回环数 显示的一个算法,,大家帮看看哪里错了 谢谢哈
  1. package cn.itheima;

  2. public class RollNumber {
  3.         public static void main(String[] args) {
  4.                 rollNumPrint(5,5);
  5.         }

  6.        
  7.         public static void rollNumPrint(int x,int y)
  8.         {
  9.                 x--;y--;
  10.                 int[][] arr= new int[x][y];
  11.                 //flag means array get number's direction 1RT/2DN/3LT/4UP/0STOP
  12.                 int flag = 1;
  13.                 //record roll times
  14.                 int roll = 0;               
  15.                 //cnt is the counter add itself.
  16.                 int cnt = 1;
  17.                 int ax = 0;
  18.                 int ay = 0;
  19.                
  20.                 while(true)
  21.                 {               
  22.                         arr[ax][ay] = cnt;
  23.                         cnt++;
  24.                         if(cnt == (x+1)*(y+1)+1)break;
  25.                         switch (flag)
  26.                         {
  27.                                 case 1:
  28.                                         if(ax < x-roll)ax++;
  29.                                         else
  30.                                                 {
  31.                                                         flag++;
  32.                                                         continue;
  33.                                                 }
  34.                                         break;
  35.                                 case 2:
  36.                                         if(ay < y-roll)ay++;
  37.                                         else{
  38.                                                 flag++;
  39.                                                 continue;
  40.                                         }
  41.                                                 break;
  42.                                 case 3:
  43.                                         if(ax > roll)ax--;
  44.                                         else {
  45.                                                 flag++;
  46.                                                 roll++;
  47.                                                 continue;
  48.                                         }break;
  49.                                 case 4:
  50.                                         if(ay > roll)ay--;
  51.                                         else
  52.                                                 {
  53.                                                         flag = 1;
  54.                                                         continue;
  55.                                                 }
  56.                                         break;
  57.                                 default:
  58.                                         System.out.println("Error!");
  59.                                         break;
  60.                         }
  61.                 }
  62.                 for(int tmp=0 ; tmp <= y; y++)
  63.                 {
  64.                         for(int tmpx=0 ; tmpx<= x; x++)
  65.                         {
  66.                                 System.out.print(arr[tmpx][tmp]+'\t');
  67.                         }
  68.                         System.out.println("");
  69.                 }
  70.         }
  71. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

5 个回复

倒序浏览
求小伙伴呀~~~{:soso_e136:}
回复 使用道具 举报
30行 38行
你先定义了一个二位数组 int[][] arr=int[x][y];
x y在主函数里为5,5
当传给rollNumPrint 方法的时候 x y都自减1 变为4
所以你的二位数组实际是
int[][] arr=int[4][4];
数组长度为4 那么角标最大也就只能为3
程序开始运行 如果ax < x-roll         ax的值自增
假设 程序循环到第三次 ax的值为3 3小于(x-roll)的值 也就是3小于4(因为x的值为4  roll的值为0 4减0等于4)  条件成立
ax又自增一次 值变为4
数组的元素才4个 而角标是从0开始计算的 当角标变为4的时候 也就是说 数组里得有5个元素
换句话说 角标为4的数值是不存在的 所以 报出角标越界异常
下面38行同理
解决办法 把if判断条件改一下
x-roll-1
你再试试吧

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
好吧 我脑残了一下- -  改改试试哈~~
回复 使用道具 举报
修改了一下  把自减弄到定义数组下面了- -  但是运行之后貌似在死循环中- -。。。头疼 - -
回复 使用道具 举报
while(true)本身这个条件就是死循环
我知道你要做的是那个4阶螺旋
那么你的条件最好改成循环16次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马