Java 找到合适和正确目的地的算法

Java 找到合适和正确目的地的算法,java,algorithm,graph-algorithm,Java,Algorithm,Graph Algorithm,一个机器人降落在火星上,火星恰好是一个笛卡尔网格;假设我们把这些指令交给机器人, 例如LFFFRFFFRRFFF,其中L表示左转90度,R表示右转90度,F表示向前一个空间, 请为机器人编写控制代码,使其最终到达适当和正确的目的地,并包括单元测试 以下是命令FF的输出示例: [0, 2] 我可以在谷歌上找到这个问题的解决方案,但我不太清楚这个解释。我试图清楚地理解如何解决这个问题并用Java实现的逻辑。感谢您的帮助 更新:这是一个面试问题。现在,我正在努力提高我的知识。这对我来说是个有趣的问题

一个机器人降落在火星上,火星恰好是一个笛卡尔网格;假设我们把这些指令交给机器人, 例如LFFFRFFFRRFFF,其中L表示左转90度,R表示右转90度,F表示向前一个空间, 请为机器人编写控制代码,使其最终到达适当和正确的目的地,并包括单元测试

以下是命令FF的输出示例:

[0, 2]
我可以在谷歌上找到这个问题的解决方案,但我不太清楚这个解释。我试图清楚地理解如何解决这个问题并用Java实现的逻辑。感谢您的帮助

更新:这是一个面试问题。现在,我正在努力提高我的知识。这对我来说是个有趣的问题。我可以删除,如果我打破了任何堆叠超过规则

以下是我所做的研究:

我认为这段代码足够简单。
目前我没有Java环境,所以我无法测试它。如果我错了,请纠正我

我为您准备了以下代码:

public static String calculate(String str) {
    int x = 0;
    int y = 0;
    int[][] move = {{0,1}, {1,0}, {-1,0}, {0,-1}};
    int dir = 0;

    for (char ch: str.toCharArray()) {
        if (ch == 'F') { 
            x += move[dir][0]; 
            y += move[dir][1]; 
        } else if (ch == 'L') {
            dir++;
        } else if (ch == 'R') {
            dir--;
        }
        dir = (dir + 4) % 4;
    }
 return "[" + x + ", " + y + "]";
 }
让我们分析一下我天真的解决方案

int[]move={{0,1},{1,0},{-1,0},{0,-1};是当您使用变量dir向左旋转led时的所有移动组合。 循环字符串str以获取each命令的 读取命令,如果是F,则沿dir方向扭转。子阵列用于轴。 在旋转的情况下,添加或减去dir以获得正确的结果。 最后,使用dir=dir+4%4;使dir不溢出;。这意味着当我向下移动dir=0,向左移动dir-,它将导致dir=-1,这是非法的。所以dir+4=3和3%4=3,它给出了最后一组方向。
希望它能帮助您理解逻辑。

超级酷帅,根据我的意见,您的逻辑是正确的,我测试了您的代码,发现了一些错误,您的字符串d需要在for循环之前转换数组*

in.nextLine.toCharArray

*);字符串d将是char[]d。还有你的打印输出我已经改变了

[+coords[0]+,+coords[1]+]


。这是我所做的全部代码。在那之后,它开始工作了。

@supercolhandsomegelboy如果你把任务读了三遍或更多遍,你会得到令人惊讶的答案:是的,这是显而易见的。如果要回答这个面试问题,我讨厌在这方面给出提示。告诉我你为什么投-1票。我可以删除这个问题。“我正在努力为每个人找到答案。”我已经对雇主说我无法解决这个问题,其他的工作可以帮助我解决这个问题,但我正在努力了解。我并不是想通过欺骗来得到这份工作。这是我不做也永远不会做的事情。@BostonStar哪一部分你不理解?画一个正常的X,Y坐标系,X轴向右,Y轴向上。将机器人置于0,0,并使其面朝上。F向前移动1,机器人保持在0,1。另一个F向前移动1,机器人保持在0,2。我向左拐。F向前移动1,使机器人处于-1,2。等等现在,从0,0开始,LFFFRFFFRRFFF把机器人放在哪里?非常感谢。这不是关于面试的问题。这是关于如何思考这样的解决方案。我发表这一评论是因为社区成员在没有理解的情况下投了反对票。欢迎,很高兴帮助:
public static String calculate(String str) {
    int x = 0;
    int y = 0;
    int[][] move = {{0,1}, {1,0}, {-1,0}, {0,-1}};
    int dir = 0;

    for (char ch: str.toCharArray()) {
        if (ch == 'F') { 
            x += move[dir][0]; 
            y += move[dir][1]; 
        } else if (ch == 'L') {
            dir++;
        } else if (ch == 'R') {
            dir--;
        }
        dir = (dir + 4) % 4;
    }
 return "[" + x + ", " + y + "]";
 }