2010-07-11 62 views
-1

好吧,我好像在代码的一部分中出现了一个超出边界错误的数组索引。特别是在85-102行...Java数组索引超出范围

我的代码:http://www.sosos.pastebin.com/f0JQBWui

我只是希望它来检查瓷砖受阻的时间提前这样我的精灵并没有在它不能的方向移动。只有当我在地图的右侧或底部角落时才会发生此异常。

我的,如果因为我就在拐角处时..它检查瓷砖它的右侧和底部,其不存在,为什么会发生这种错误猜...

+3

请发布相关的代码片段。 – 2010-07-11 05:55:12

+1

你应该只粘贴相关的行。此外,我假设你在堆栈轨迹中看到了异常,这表明你发现异常发生在哪一行,而不是像你所建议的那样是一些神秘的范围。 – 2010-07-11 05:56:15

+0

每次我添加“getStackTrace”我得到一个“必须无效”的错误。 – nn2 2010-07-11 05:57:04

回答

2

1)您实现了挡住了去路(TX,TY),它只接受法律板坐标(0 < = TX < = 12和0 < = TY < = 8)。否则,它检查一个非法的数组位置,产生一个ArrayIndexOutOfBoundsException。你确定这是你的意图吗?我认为把板块视为封锁是有道理的。

2)第85-102行似乎有很多错误。我觉得你的意思是这样的:

 if (spawnX == 0 || blocked(spawnX - 1, spawnY)) { 
      left = false; 
      System.out.println("You can't go left!"); 
     }   
     if (spawnX == 12 || blocked(spawnX + 1, spawnY)) { 
      right = false; 
      System.out.println("You can't go right!"); 
     } 
     if (spawnY ==0 || blocked(spawnX, spawnY - 1)) { 
      up = false; 
      System.out.println("You can't go up!"); 
     } 
     if (spawnY == 8 || blocked(spawnX, spawnY + 1)) { 
      down = false; 
      System.out.println("You can't go down!"); 
     } 

无论如何,如果你修复(1)我建议,每个方向的额外束缚条件是不必要的。 3)isInBound(r,c)实现不正确。由于c的条件,它总是返回错误。

4)代码还有很多其他问题,但我不会详细介绍。作为一个原则,尽量简化设计,确保代码不会重复。

0

你将有在你的blocking()函数中做一些边界检查。确保他们给你的坐标实际上存在并返回一些“被阻止”的值,如果他们不这样做的话。

0

在底部或右侧获取错误的描述似乎表明您需要测试该值是否超出数组边界。看看Array.length