2017-03-29 14 views
0

マウスをクリックしたときにquadtreeに要素を挿入しようとしています。マウスをクリックすると挿入メソッドが呼び出され、パラメータとしてポイントが送信されます。数回のクリックの後、ループイン・イン・メソッドは無限になりますが、なぜそれを見つけることができませんでした。quadtreeに要素を挿入しているときに無限ループwhileループ

ここに示す方法です。

public void insert(Point point){ 
     Node newNode = new Node(point); 
     if(root==null){ 
      root=newNode; 
      return; 
     } 
     Node current=root; 
     Node parent=null; 

     while(true){ 
      parent = current; 
      System.out.println("a"); 
      if(point.getX()<current.point.getX() && point.getY()<current.point.getY()){ 
       current=current.NW; 
       if(current==null){ 
        parent.NW= newNode; 
        return; 
       }   
      } 
      else if(point.getX()>current.point.getX() && point.getY()<current.point.getY()){ 
       current=current.NE; 
       if(current==null){ 
        parent.NE= newNode; 
        return; 
       }   
     } 
      else if(point.getX()<current.point.getX() && point.getY()>current.point.getY()){ 
       current=current.SW; 
       if(current==null){ 
        parent.SW=newNode; 
        return; 
       } 
      } 
      else if(point.getX()>current.point.getX() && point.getY()>current.point.getY()){ 
       current=current.SE; 
       if(current==null){ 
        parent.SE=newNode; 
        return; 
       } 
      } 

    } 
    } 

残りのコードが必要な場合は教えてください。

答えて

1

まあ、pointcurrent.pointが同じポイントであるか、水平に並んでいるか垂直に並んでいるケースはカバーしていません。これらの3つのケースのそれぞれで、あなたのif条件のどれも真ではなく、ループを終了する方法はありません。

<の条件を<=に、または>の条件を>=に変更する必要があります。したがって、

if(point.getX()<=current.point.getX() && point.getY()<=current.point.getY()){ 

などのようなもので、<を使用して比較した場合も同様です。

これは、X値が等しい場合やY値が等しい場合にループが終了することを保証します。

関連する問題