这是如何导致无限循环的?

时间:2017-01-28 21:25:44

标签: java list loops

我发现这个方法是我的程序问题的根源。它涉及一个名为“theBoard'与国际象棋对象。当单步执行我的调试器时,我的调试器会在遇到此检查方法时结束。任何人都知道它的问题是什么?

编辑:此方法检查链表中的一个棋子是否可以攻击链表中的另一个棋子。它将theBoard(在另一个类中创建的链接列表对象,其中添加了部分)作为参数。

方法' .isAttacking'检查一件作品是否可以攻击另一件(每件作品类中的方法,每件作品类扩展一个摘要" chessPiece"类)。

我做错了吗?我正在使用Intellij调试器并逐行进行。一旦我点击此方法调用,调试器似乎停止。

public void checkAttacking (chessBoard theBoard) throws FileNotFoundException {

    boolean foundPieces = false;
    Link current = theBoard.head;

    while (current != null) {

        Link current2 = theBoard.head;
        while (current2 != null) {

            if (current != current2) {

                if ((current.piece.isAttacking(current2.piece)) && foundPieces == false) {

                   System.out.println(current.piece.pieceType + " " + current.piece.col +
                    " " + current.piece.row + " " + current2.piece.pieceType +
                    " " + current2.piece.col + " " + current2.piece.row);
                    foundPieces = true;
                }
            }
            current2 = current2.next;
        }
        current = current.next;
    }
    if (foundPieces == false) {
        System.out.print("-");
    }
}

1 个答案:

答案 0 :(得分:1)

import java.util.LinkedList;
public class Test {
    public static void main(String[] args) {
        LinkedList list=new LinkedList<>();
        int i=0;
        while(list!=null){
            System.out.println("Welcome");
            i++;
            if(i>100)
                System.exit(0);
        }
    }
}

这是我的代码示例。结果是100x&#34;欢迎&#34;文本。 我认为你有同样的问题。

 while (current != null)

在循环中,检查参考对象&#34; current&#34; LinkedList类型是否为null。 如果你在其他类中创建了对象(你说你做了它),你的条件每次都是真的。所以你有无限循环。

如果要检查当前列表中的每个对象,我建议使用Iterator和hasNext(),next()方法或for-each循环。 见到你。