我正在尝试配置一种方法来检查头部和所有其他节点之间的冲突。在这一点上,我陷入了一个循环。任何想法如何遍历列表,比较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/