2010-07-11 61 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