2017-01-28 6 views
-3

私は、この方法が自分のプログラムの問題の原因であることを発見しました。それにはチェスピースオブジェクトを含む 'theBoard'というリンクリストが含まれています。デバッガをステップ実行するとき、デバッガはこのチェックメソッドにヒットすると終了します。誰もがそれの問題が何であるか知っていますか?これはどのように無限ループを引き起こしていますか?

EDIT:この方法では、リンクリスト内の1つのチェススピスがリンクリスト内の別のチェススピースを攻撃できるかどうかをチェックします。 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("-"); 
    } 
} 
+0

ようこそ!明確にするために[あなたの質問を編集する](https://stackoverflow.com/posts/41914995/edit)をお願いしますか?あなたが経験している無限ループとは何ですか? 「デバッガが終了しました」とはどういう意味ですか?あなたが参照している "チェック方法"はどれですか?ありがとう! – cxw

+0

2つのループがあります。 – 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型の参照オブジェクト "current"がnullであるかどうかをチェックします。 他のクラスのオブジェクトを作成した場合(それを行ったと言います)、あなたのcontidtionは毎回真です。だからあなたは無限ループをしています。

現在のリスト内のすべてのオブジェクトをチェックする場合は、IteratorとhasNext()、next()メソッドまたはfor-eachループを使用することを提案します。 お会いしましょう。

関連する問題