2016-04-14 45 views
1

我需要遞歸地在x和y軸座標上找到一個對象。在這個特殊的代碼,我需要找到「雷米」是誰在座標168250通過調用搜索方法反覆如何用軸編寫遞歸算法?

import java.awt.Point; 

public class Sensor { 

private Point target; 
private Point[] points = {new Point(378, 349), new Point(147, 315), new Point(95, 375), new Point(242, 493), new Point(379, 389), new Point(168, 250), new Point(130, 220), new Point(160, 200), new Point(0, 0), new Point(0, 511), new Point(511, 0), new Point(511, 511)}; 
private String[] names = {"Bernstein", "DukeDog", "Huey", "Hedwig", "Flipper", "Remy", "QuadCat", "Nemo", "UL", "LL", "UR", "LR"}; 

public Sensor(String paramString) { 
    this.target = new Point(512, 512); 
    for (int i = 0; i < this.names.length; i++) { 
     if (paramString.equalsIgnoreCase(this.names[i])) { 
      this.target = this.points[i]; 
      break; 
     } 
    } 
} 

public static void main(String[] args) { 
    Sensor sensor = new Sensor("Remy"); 
    Point result = sensor.search(0, 0, 512); 
    if (result != null) { 
     System.out.println("location: " + result.x + "," + result.y); 
    } else { 
     System.out.println("unable to find"); 
    } 
} 

public Point search(int x, int y, int width) { 
    //Write a recursive algorithm to find Remy calling the scan method repeatedly such as: scan(x,y,width); 
    //todo 
    return null; 
} 

public int scan(int paramInt1, int paramInt2, int paramInt3) { 
    if ((this.target.x >= paramInt1) && (this.target.x < paramInt1 + paramInt3) && (this.target.y >= paramInt2) && (this.target.y < paramInt2 + paramInt3)) { 
     return paramInt3; 
    } else { 
     return -paramInt3; 
    } 

} 

}

回答

0

我的建議是:

public Point search(int x, int y, int width) { 

    System.out.println(x + "\t" + y + "\t" + width); 

    int w = width/2; 
    if(w<=1) 
     return new Point(x,y); 
    int x1 = x+w; 
    int y1 = y+w; 

    if(target.x>=x&&target.x<x1&&target.y>=y&&target.y<y1) 
     return search(x,y,w); 
    else if(target.x>=x1&&target.x<x+w&&target.y>=y&&target.y<y1) 
     return search(x1,y,w); 
    else if(target.x>=x&&target.x<x1&&target.y>=y1&&target.y<y1+w) 
     return search(x,y1,w); 
    else /*if(target.x>=x1&&target.x<=x+w&&target.y>=y1&&target.y<=y1+w)*/ 
     return search(x1,y1,w); 
} 

當你運行這個方法,輸出是:

0 0 512 
0 0 256 
128 128 128 
128 192 64 
160 224 32 
160 240 16 
168 248 8 
168 248 4 
168 250 2 
location: 168,250 

請注意,它假定width是一個這可以很容易地適應。

我希望它有幫助。

+0

它回答你的問題嗎? – joel314