我正在尝试配置一种方法来检查头部和所有其他节点之间的冲突。在这一点上,我陷入了一个循环。任何想法如何遍历列表,比较head与head.next .next .next.next等等?

编辑:添加返回false之后;在conflictCheck(a,b.getNext())之后,不再存在循环问题,但是输出反映了此方法,而不是将每个节点与头节点进行比较。

编辑X 2! :我相信我有循环检查冲突的方法,可以很好地感谢所有评论/回答的人。现在,我的程序中出现了奇怪的结果,其中检测到了冲突,但对此却无计可施。我添加了处理这些恶作剧的其他重要方法。另外,我的输出如下。有任何理由为什么每个节点的列都移到3或保持在1?

    public static void playChess() {
    System.out.println("Playing chess");
    if (conflictCheck(head, head.getNext())) {
        if (head.getColumn() == 8) {
            queens.pop();
        }
        else if (!queens.isEmpty() && head.getColumn()!= 8) {
            System.out.println("Adjusting head");
            head.setColumn(head.getColumn()+1);
            System.out.println("Head is now " + head.getRow() + ", " + head.getColumn());
            playChess();

        }
    }

    else if (queens.size() < 8) {
        System.out.println("Stack isn't full yet");
        queens.push(queens.size()+1,1);
        queens.viewPieces();
        playChess();
        }
    else {
        success= true;
        System.out.println("Success");
        queens.viewPieces();
        return;
    }
}


    public static boolean conflictCheck(QueenNode a, QueenNode b) {
    //checks for conflicts between head and all other nodes in the stack
    a= head;
    while (b != null) {
        if (a.getRow()!=b.getRow() && a.getColumn()!=b.getColumn() && !diagonal(a,b)){
            conflictCheck(a,b.getNext());
        }
        else {
            System.out.println("There is a conflict");
            return true;
        }
    }
    return false;
}


我的输出

下棋
比较8,3和7,1
与8,3和6,3存在冲突
成功
堆栈
8、3
7、1
6、3
5、1
4、3
3,1
2 3
1、1
堆栈末端

最佳答案

您正在将循环与递归调用混合在一起。

如果我对您的理解正确,那么您将需要:

public static boolean conflictCheck(QueenNode a, QueenNode b) {
//checks for conflicts between head and all other nodes in the stack

    if (b == null){
        return false;
    }
    if (a.getRow()!=b.getRow() && a.getColumn()!=b.getColumn() && !diagonal(a,b)){
        return conflictCheck(a,b.getNext());
    }
    else {
        System.out.println("There is a conflict");
        return true;
    }
}


我没有运行代码,所以我希望您能理解,可能是语法错误或4。

关于java - 递归Java,检查节点之间的冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9892982/

10-15 10:56