玉兔主程序简化版
玉兔号离开嫦娥三号后,根据自身安装的定位系统可以知道自己的初始位置,我们记为 X0 , Y0 ;同时玉兔号也可以知道当前它的朝向,如东、西、南、北(暂时只考虑这四个方向)。
中国国家航天局会向玉兔号发送指令,我们先暂定为3种:
- F : 当玉兔号接收到这条指令之后,会向前移动一个坐标单位的距离
- L : 当玉兔号接受到这条指令之后,会原地向左旋转90度
- 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轴移动 } }
浙公网安备 33010602011771号