具有已定义的数字序列的JAVA循环

具有已定义的数字序列的JAVA循环,java,loops,Java,Loops,我目前正在用java编程一个自主机器人,这是我的问题 考虑到只有4种可能的方向,我想随时知道我的机器人的方向: 上/下/左/右 我用以下数字定义这些职位: 上下=0,左=1,右=1 假设我的机器人当前方向为“0”(向上),我向右旋转90度,那么值应该变为1。如果我再次向右旋转90度,它将变回0 我们有以下顺序:0,-1,0,1(我们可以从任何点开始) 基本上我的机器人会遇到不同类型的障碍物。每次他遇到一个人,他要么向右拐,要么向左拐。我希望他总是朝着“向上”的方向转。如果机器人在“0”的位置转动

我目前正在用java编程一个自主机器人,这是我的问题

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

上/下/左/右

我用以下数字定义这些职位:

上下=0,左=1,右=1

假设我的机器人当前方向为“0”(向上),我向右旋转90度,那么值应该变为1。如果我再次向右旋转90度,它将变回0

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

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

我正在努力寻找如何根据机器人在右侧(或左侧)旋转的“象限”数正确更改当前值。我想到了(-1)的指数,但我不知道如何计算

你能帮我吗

谢谢大家!


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

你的问题似乎是实验窦函数或余弦函数的一个很好的候选者

如果你把你的问题当作一个象限,你可以使用窦的适当性,比如:

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


这对您有帮助吗?

您可以使用一些枚举来执行您需要的操作:

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];
    }
}
()


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

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.turnlift().turnlift().turnlift().getFoo()

为什么不放弃和放弃单独的值呢?比如@gurvinder,我建议使用“N,S,E,W”而不是范围-1到1。这是因为整个过程是如何工作的,基本上这些值将被用作其他方法的乘数@GurwinderPlease提供一些示例代码,说明您是如何使用它的,以及您在何处面临这个问题。谢谢,我将尝试一下@如果一个答案对你有用,记住你可以接受它来表示感谢!