黑马程序员技术交流社区
标题:
问下问题~~下标越界哇
[打印本页]
作者:
RuntimeError!
时间:
2013-12-7 16:05
标题:
问下问题~~下标越界哇
做个回环数 显示的一个算法,,大家帮看看哪里错了 谢谢哈
package cn.itheima;
public class RollNumber {
public static void main(String[] args) {
rollNumPrint(5,5);
}
public static void rollNumPrint(int x,int y)
{
x--;y--;
int[][] arr= new int[x][y];
//flag means array get number's direction 1RT/2DN/3LT/4UP/0STOP
int flag = 1;
//record roll times
int roll = 0;
//cnt is the counter add itself.
int cnt = 1;
int ax = 0;
int ay = 0;
while(true)
{
arr[ax][ay] = cnt;
cnt++;
if(cnt == (x+1)*(y+1)+1)break;
switch (flag)
{
case 1:
if(ax < x-roll)ax++;
else
{
flag++;
continue;
}
break;
case 2:
if(ay < y-roll)ay++;
else{
flag++;
continue;
}
break;
case 3:
if(ax > roll)ax--;
else {
flag++;
roll++;
continue;
}break;
case 4:
if(ay > roll)ay--;
else
{
flag = 1;
continue;
}
break;
default:
System.out.println("Error!");
break;
}
}
for(int tmp=0 ; tmp <= y; y++)
{
for(int tmpx=0 ; tmpx<= x; x++)
{
System.out.print(arr[tmpx][tmp]+'\t');
}
System.out.println("");
}
}
}
复制代码
作者:
RuntimeError!
时间:
2013-12-7 16:22
求小伙伴呀~~~{:soso_e136:}
作者:
几番意难相付
时间:
2013-12-7 16:49
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
你再试试吧
作者:
RuntimeError!
时间:
2013-12-7 17:19
好吧 我脑残了一下- - 改改试试哈~~
作者:
RuntimeError!
时间:
2013-12-7 17:22
修改了一下 把自减弄到定义数组下面了- - 但是运行之后貌似在死循环中- -。。。头疼 - -
作者:
几番意难相付
时间:
2013-12-7 18:20
while(true)本身这个条件就是死循环
我知道你要做的是那个4阶螺旋
那么你的条件最好改成循环16次
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2