(Java)NASA小车移动,求小车坐标

题干:

NASA派出的一个机器小车已经成功着陆火星。小车面前的是一个十分规矩的矩形平原,操作员需要通过远程发送指令序列来控制这些小车移动,在移动的过程中小车上的高清摄像机会将整个平原的地形完整的记录并送回地球。为了方便导航我们将平原看成一个二维坐标面,x轴正方向为东,y轴正方向为北,矩形平原的最左下角坐标为(0,0)。这样小车的方位便可以使用(X坐标,y坐标,面向方位)来表示,如(0,0,N)表示小车位于平原的左下角并且面向北。操作员可用的指令为L,R和M。L和R可以使小车向左或向右旋转90度而不移动,M可以使小车向所面向的方位前进一格而不改变朝向。你需要编写一个程序来计算小车的最终位置与方位。 

 小车的坐标:1,2,N  ,发出指令:LMLMLMLMM,预期结果:1,3,N 

 小车的坐标:3,3,E  ,发出指令:MMRMMRMRRM,预期结果:5,1,E

代码:

 //小车移动
    @org.junit.Test
    public void test6() {
        Scanner sc = new Scanner(System.in);
        int nowDir=0;//小车当前朝向,0-北,1-东,2-南,3-西,通过++或--来改变朝向
        int x,y;//小车坐标
        String beginDir="";//小车初始朝向
        String endDir="";//小车最终朝向
        while (true) {
            //输入小车坐标
            System.out.println("请输入小车初始位置");
            System.out.print("小车横坐标x:");
            x = sc.nextInt();
            System.out.print("小车纵坐标y:");
            y= sc.nextInt();
            //输入小车初始朝向
            System.out.print("小车初始朝向(请输入N、E、S、W):");
            beginDir =sc.next();
            //输入指令
            System.out.print("请输入指令:");
            String order = sc.next();

            //解析初始朝向
            switch (beginDir){
                case "N":nowDir=0;break;
                case "E":nowDir=1;break;
                case "S":nowDir=2;break;
                case "W":nowDir=3;break;
            }

            //解析指令
            char[] orderChar = order.toCharArray();//把指令转为字符串数组
            for (char e : orderChar) {
                //解析转向指令L,R
                if (e == 'L') {
                    nowDir--;//向左转90°
                    if (nowDir < 0) nowDir = 3;//北向左转90°为西
                } else if (e == 'R') {
                    nowDir++;//向右转90°
                    if (nowDir > 3) nowDir = 0;//西向右转90°为北
                } else {
                    //解析前进指令M
                    switch (nowDir) {
                        case 0:
                            y++;
                            break;
                        case 1:
                            x++;
                            break;
                        case 2:
                            y--;
                            break;
                        case 3:
                            x--;
                    }
                }
            }
            //将朝向转为大写字母
            switch (nowDir){
                case 0:endDir = "N";break;
                case 1:endDir = "E";break;
                case 2:endDir = "S";break;
                case 3:endDir = "W";break;
            }
            System.out.println(x+","+y+","+endDir);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值