[英]Array out of bounds exception in java
因此,我不確定這將超出什么范圍,您是否可以全部向我指出,可能是愚蠢的,但我真的很累,無法找出問題所在。 我在每個openNode.indexOf()上都遇到了錯誤。 同樣通過打印N值,我知道N.getX()或N.getY()永遠不會低於1。
if(N.getX() > 0)
{
flag = false;
if(!isTilePassable(nodeGrid[N.getX()-1][N.getY()].getX() * 32, nodeGrid[N.getX()-1][N.getY()].getY() * 32)) //west
closedNode.add(nodeGrid[N.getX()-1][N.getY()]);
for(Node e : closedNode)
if(e.equals(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])))
flag = true;
if(!flag)
{
openNode.get(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])).setDistance(SRC);
openNode.get(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])).setParent(N);
}
}
if(N.getY() > 0)
{
flag = false;
if(!isTilePassable(nodeGrid[N.getX()][N.getY()-1].getX() * 32, nodeGrid[N.getX()][N.getY()-1].getY() * 32)) //north
closedNode.add(nodeGrid[N.getX()][N.getY()-1]);
for(Node e : closedNode)
if(e.equals(openNode.indexOf(nodeGrid[N.getX()][N.getY()-1])))
flag = true;
if(!flag)
{
openNode.get(openNode.indexOf(nodeGrid[N.getX()][N.getY()-1])).setDistance(SRC);
openNode.get(openNode.indexOf(nodeGrid[N.getX()][N.getY()-1])).setParent(N);
}
}
這是nodeGrid的初始化,並分配x + y值Node對象采用x和y的參數
for(int i = 0; i < 36; i++)
for(int ii = 0; ii < 25; ii++)
nodeGrid[i][ii] = new Node(i,ii); //initializes node grid
問題可能不在於您的openNode.indexOf()
而是我認為它在您的nodeGrid[][]
。
從您的初始化部分給出的N.getX()
大於或等於36或小於0和/或N.getY()-1
大於或等於25或小於0。
並且由於您已經說過這些值在某些時候達到-1,但是您通過檢查N.getxX()>0
進行了檢查,因此在檢查getX()' to be greater than
仍然浪費了精力。 getX()' to be greater than
0, but inside that block you are using
getY() which could be
-1`
看到這個
if(N.getX() > 0) {
// more code
if(e.equals(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()]))) // you are using getY
在這里,您正在檢查X
而不是Y
因此它可能會觸發異常。 如果您提供堆棧跟蹤,可以提供更多幫助。
nodeGrid[N.getX()-1][N.getY()]
與closedNode一起使用,在那里沒有發生錯誤,只有openNode為空,在這種情況下, openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])
將返回-1, openNode.get(-1)
將超出范圍
感謝您的所有幫助,但我發現我犯了一個愚蠢的錯誤。 使用indexOf()來搜索nodeGrid來檢索與openNode相同的X和Y值,盡管我的距離變量不同,所以由於openNode中沒有該變量,所以它不斷返回-1作為索引位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.