如果我翻译某个方块之外的某个点,如何打印原始点坐标?

时间:2016-11-28 19:36:39

标签: java oop coordinate

我正在尝试打印翻译点的坐标。如果该点在x和y轴上都转换到10,-10范围之外,则应返回原始点而不是转换点。因此,对于p1(5,4),如果我要将它翻译为(7,8),它应该返回(5,4)。我无法弄清楚如何告诉Java在这种情况下打印原始点。我需要包含某种布尔值吗?这是我到目前为止所拥有的。 (代码用德语写,但“verschiebe”意思是翻译。)任何帮助将不胜感激!谢谢你们提前:))

public class Punkt2 {
private int x;
private int y;

public void setX (int i) {
    x = i;
}
public void setY (int i) {
    y = i;
}
public void verschiebe(int deltaX, int deltaY){
    x = x + deltaX;
    y = y + deltaY;
}

public int getX(){
    return x;
}

public int getY(){
    return y;
}


public static void main (String[] args){
    Punkt p1 = new Punkt();
    p1.setX(5); p1.setY(4);
    Punkt p2 = new Punkt();
    p2.setX(2);p2.setY(1);

    p1.verschiebe(7,8);
    if (p1.getX() > 10 || p1.getY() > 10 || p1.getX() < -10 || p1.getY() < -10){
        System.out.println(new Punkt());
    }
    else {
        System.out.println(p1.getX() + "," + p1.getY());
    }
    p2.verschiebe(3, 2);
    if (p2.getX() > 10 || p2.getY() > 10 || p2.getX() < -10 || p2.getY() < -10){
        System.out.println(new Punkt());
    }
    else {
        System.out.println(p2.getX() + "," + p2.getY());
    }
}
}

3 个答案:

答案 0 :(得分:0)

执行此操作的常用方法是检查translate()方法内的边界。

例如:

private boolean outOfBounds(point, bounds) {
    return (abs(point) > bounds);
}

public void translate(int deltaX, int deltaY) {
    int newX = x + deltaX;
    int newY = y + deltaY;

    if(outOfBounds(newX, 10) || outOfBounds(newY, 10)) {
        return;
    }

    x = newX;
    y = newY;
}

答案 1 :(得分:0)

如果您的意思是您不希望点的x或y值超过10或低于-10,那么您只需更改verschiebe方法中的值即可。

像这样:

public void verschiebe(int deltaX, int deltaY){
    if(x + deltaX <= 10 && x + deltaX >= -10){
        x = x + deltaX;
    }
    if(y + deltaY <= 10 && y + deltaY >= -10){
        y = y + deltaY;
    }
}

如果点的大小超过10或小于-10,则点的x和y值将保持不变。所以现在在主类中你可以打印你想要的点,你的verschiebe方法会注意你的x和y总是在-10到10之间。

答案 2 :(得分:0)

让Punkt对象负责通过返回&#34;翻译&#34;来翻译点数。点。当翻译结果超出界限时,它可以返回自我。

class Punkt {

    private int x;
    private int y;

    public Punkt(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public Punkt verschiebe(int dX, int dY) {
        int newX = x+dX;
        int newY = y+dY;

        if (abs(newX) > 10 || abs(newY) > 10) {
            return this;
        }

        return new Punkt(newX, newY);
    }

    public void print() {
        System.out.println(x + "," + y);
    }

}

还会建议您自己进行Punk打印,这样您的客户就可以看作:

public static void main (String[] args){
    Punkt p1 = new Punkt(5, 4);
    Punkt p2 = new Punkt(2, 1);

    p1.verschiebe(7,8).print();
    p2.verschiebe(3,2).print();
}

更好的是,如果客户实际上需要打印翻译点,则上述代码可以进一步改进为:

public static void main (String[] args){
    Punkt p1 = new Punkt(5, 4);
    Punkt p2 = new Punkt(2, 1);

    p1.printTranslated(7,8);
    p2.printTranslated(3,2);
}

让Punkt满足客户的需求并不难。