java - 如何编写带有 Axis 的递归算法?

标签 java recursion axis point binary-search

我需要递归地在 x 和 y Axis 坐标上找到一个对象。在这段特定的代码中,我需要通过重复调用搜索方法来找到位于坐标 168,250 中的“Remy”

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;
    }

}

}

最佳答案

我建议这样做:

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 是 2 的幂。这可以很容易地进行调整。

希望对您有所帮助。

关于java - 如何编写带有 Axis 的递归算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36613860/

相关文章:

java - 以 OSX 风格实现保存对话框

java - 具有等待和通知的 3 个线程的死锁行为

c++11 - 铛。 fatal error : recursive template instantiation exceeded maximum depth

javascript - D3、设置y轴线的最大条数

java - 这个 Java 错误消息意味着什么?我该如何解决它?

java - 生产 EntityManager 抛出 __FIRST_PHASE__ 丢失

java - 日期格式失败

java - 多级菜单ArrayLists中对象的循环(Java)

javascript - 如何以堆栈安全的方式映射树?

javascript - 我怎么知道 Axis 上显示的是什么日期?