玉兔主程序简化版

玉兔号离开嫦娥三号后,根据自身安装的定位系统可以知道自己的初始位置,我们记为 X0 , Y0 ;同时玉兔号也可以知道当前它的朝向,如东、西、南、北(暂时只考虑这四个方向)。

中国国家航天局会向玉兔号发送指令,我们先暂定为3种:

  1. F : 当玉兔号接收到这条指令之后,会向前移动一个坐标单位的距离
  2. L : 当玉兔号接受到这条指令之后,会原地向左旋转90度
  3. R : 当玉兔号接收到这条指令之后,会原地向右旋转90度

要求:

一)设计一个玉兔号的主程序,能够接收中国国家航天局发送过来的指令序列(如FFLFRFLL),执行该指令序列之后,玉兔号能够走到正确的位置,并知道当前正确的位置。(如:玉兔号初始位置为 (0,0),方向朝东,执行指令 FFLFRFLL之后,位置为 (3,1) 方向朝西)      

二)主程序中,不允许出现switch case语句,也不允许出现else关键字,if关键字出现的次数要求在5次以下(0-4次)

三)主程序可以用任何语言编写,如Java、C#、Ruby、Python、PHP等

在所选语言允许的情况下,请编写相应的单元测试

public class Aircraft {
    private int x;
    private int y;
    private int xDir;
    private int yDir;
    private int[] dir = {-1,0,1,0};//东(1 0) 南(0 -1) 西(-1 0) 北(0 1)
    private String[] dirStr = {"西","北","东","南"};
    
    public Aircraft(int x,int y,int xDir,int yDir){
        this.x=x;
        this.y=y;
        this.xDir=xDir;
        this.yDir=yDir;
    }
    
    public void move(String instruct){//执行指令串
        int length = instruct.length();
        for(int i=0;i<length;i++){
            step(instruct.substring(i,i+1));
        }
        System.out.println("移动后位置:("+x+","+y+")");
        System.out.println("方向朝向:"+dirStr[xDir]);
    }
    
    private void step(String instruct){//执行一步指令
        if("L".equals(instruct)){//左转
            xDir = (xDir + 1)%4;
            yDir = (yDir + 1)%4;
            return;
        }
        if("R".equals(instruct)){//右转
            xDir = (xDir + 3)%4;
            yDir = (yDir + 3)%4;
            return;
        }
        x = x + dir[xDir];//x轴移动
        y = y + dir[yDir];//y轴移动
    }
}

 

        

posted @ 2014-02-12 10:58  esther&  阅读(15)  评论(0)    收藏  举报