簡體   English   中英

Java中的數組超出范圍異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM