0

DFSを使ってプログラムナイトツアーを作ろうとしていますが、このプログラムを解決できません..いつもこのようなメッセージエラーが出るからです.

スレッド「AWT-EventQueue-0」での例外.processKnightTour(KnightTour.java:82)

誰かが私を助けてくれることを願っています..

public void processKnightTour(int indexX, int indexY){
    System.out.println(indexX);
    System.out.println(indexY);
    int[] x={2,2,-2,-2,1,1,-1,-1};
    int[] y={1,-1,1,-1,2,-2,2,-2};
    int countPath=0;
    workList = new ArrayList();
    node[indexX][indexY] = 1;
    workList.add(new Coordinate(indexX, indexY));
    current =(Coordinate) workList.get(workList.size()-1);
    boolean statusChild;
    while(node[current.row][current.column] != 64){
        statusChild = false;
        for(int loop=0; loop<8; loop++){
            if(current.row+x[loop]>=0 && current.row+x[loop]<=7 && current.column+y[loop]>=0 && current.column+y[loop]<=7){
                if(node[(current.row+x[loop])][(current.column+y[loop])]==0){
                    workList.add(new Coordinate(current.row+x[loop], current.column+y[loop], current));
                    statusChild = true;
                }                    
            }
        }
        if(statusChild == true){
            workList.remove(workList.indexOf(current));
        }else{
            if(workList.size()-2 >= 0){
                after = (Coordinate) workList.get(workList.size()-2);
                if(current.nodeParent.equals(after.nodeParent)){

                }else{
                    node[current.nodeParent.row][current.nodeParent.column] = 0;
                }
            }
            node[current.row][current.column] = 0;                
            workList.remove(workList.size()-1);
        }
        current = (Coordinate) workList.get(workList.size()-1);
        node[current.row][current.column] = (node[current.getParent().row][current.getParent().column])+1;
        countPath++;
        //System.out.println(countPath+", "+workList.size()+", "+node[current.column][current.row]);
    }

}
4

1 に答える 1

1
        workList.remove(workList.size()-1);
    }
    current = (Coordinate) workList.get(workList.size()-1);

このスニペットでは、コードのほぼ最後で次のようになります。

  • リストに要素が1つでもある場合、最初に要素を知らずに削除します。
  • 2 番目にget(worklist.size()-1)、サイズが 0 になる可能性がある (そしてなる) リストから取得しようとします。

while ループに正しくないものがあります。意図がはっきりとわかりませんでしたが、workList正しく使用されていることを何らかの形で確認する必要があります。

于 2012-06-14T13:31:30.090 に答える