带有定义数字序列的JAVA循环

时间:2016-11-29 17:29:40

标签: java loops

我目前正在使用java编写一个自动机器人,这是我的问题;

我想知道我的机器人在任何时候的方向,考虑到只有4种可能的方向:

上/下/左/右

我使用以下数字定义每个位置:

向上和向下= 0,左= 1,右= -1

所以说我的机器人当前面向“0”(比如说),然后我在右边转90度,然后值应该变为1.如果我再次向右旋转90度,它将变回0。

所以我们有以下顺序:0,-1,0,1(我们可以从任何一点开始)。

基本上我的机器人会遇到不同类型的障碍物。每当他遇到一个,他就会向右或向左转。我希望他总是试着转向“向上”的方向。如果机器人在处于“0”位置时转动,则无关紧要,因为它不会影响Y位置(如果我们考虑X-Y轴)。但如果他在1或-1位置,那么他将不得不转90°* 1或90°*( - 1)。

我正在努力寻找如何根据机器人旋转的右侧(或左侧)有多少“象限”来正确更改我的CURRENT值。我想到了(-1)的指数,但我无法弄清楚如何。

你可以帮我解决这个问题吗?

谢谢!

P.S。我知道我可以用if条件检查值,但是有很多不同的类,我使用了很多次旋转方法,所以它需要尽可能短而简单。

2 个答案:

答案 0 :(得分:2)

您的问题似乎是尝试鼻窦或余弦函数的良好候选者。

如果您将问题用作象限,则可以使用窦的特征:

CREATE INDEX some_name 
ON dexwhs.d_account_veeva(account_dim_key, effective_start_dt)

在这种情况下,0和180度分别为0(N和S),E - W分别为1和-1。

这可以帮到你吗?

答案 1 :(得分:0)

你可以使用一些枚举来做你需要的事情:

enum Orientation {
    NORTH, EAST, SOUTH, WEST;

    // clockwise
    public Orientation turnRight() {
        Orientation[] values = values();
        int ordinal = this.ordinal();
        if (ordinal == values.length - 1) {
            return NORTH;
        }
        return values[ordinal+ 1];
    }

    // counter-clockwise
    public Orientation turnLeft() {
        Orientation[] values = values();
        int ordinal = this.ordinal();
        if (ordinal == 1) {
            return WEST;
        }
        return values[ordinal - 1];
    }
}

Live demo)。

如果需要数值,只需在枚举中添加一个字段(和构造函数):

enum Orientation {
    NORTH(0), EAST(1), SOUTH(0), WEST(-1);

    private final int foo;

    private Orientation(final int foo) {
        this.foo = foo;
    }

    // getter for "foo"

然后Orientation.NORTH.turnLeft().turnLeft().turnLeft().getFoo();