2017-01-28 4 views
-3

Я нашел этот метод источником моих проблем для своей программы. Он включает связанный список под названием «theBoard» с объектами шахмат в нем. Когда вы переходите через мой отладчик, мой отладчик заканчивается, когда он обращается к этому методу проверки. Кто-нибудь знает, в чем проблема с этим?Как это вызывает бесконечный цикл?

EDIT: Этот метод проверяет, может ли одна фишка в связанном списке атаковать другую фишку в связанном списке. В качестве параметра он берет на себя (связанный объект списка, созданный в другом классе, где были добавлены части).

Метод «.AAtacking» проверяет, может ли одна часть атаковать другую (метод в каждом классе штук, каждый кусочный класс расширяет абстрактный класс «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("-"); 
    } 
} 
+0

Добро пожаловать на сайт! Не могли бы вы [изменить свой вопрос] (https://stackoverflow.com/posts/41914995/edit) уточнить? Что такое бесконечный цикл, который вы испытываете? Что вы подразумеваете под «моими отладчиками»? Какой из методов проверки вы имеете в виду? Благодаря! – cxw

+0

У вас есть две петли. – efekctive

+0

Отредактировано для разъяснений – NoviceProgrammer123

ответ

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 «приветственный» текст. Я думаю, что у вас такая же проблема.

while (current != null) 

В вашей петле вы проверяете, является ли ссылочный объект «текущим» типа LinkedList нулевым или нет. Если вы создали объект в другом классе (вы сказали, что сделали это), ваше утверждение всегда будет истинным. Таким образом, у вас бесконечный цикл.

Если вы хотите проверить каждый объект в текущем списке, я предлагаю использовать методы Iterator и hasNext(), next() или для каждого цикла. До встречи.

Смежные вопросы