Java面试编程题

Wesley13
• 阅读 612

题目描述如下:

一队机器人漫游车将被美国宇航局降落在火星高原上。漫游车将在这个奇怪的长方形高原上巡游,以便他们的机载摄像头可以获得周围地形的完整视图,并将其发送回地球。漫游者的坐标和位置由x和y坐标的组合以及代表四个方向(E, S, W, N)的字母表示。高原划分为网格以简化导航。比如位置0,0,N,表示漫游车位于左下角并面向北。为了控制漫游车,美国宇航局发送一串简单的字母。指令字母是'L','R'和'M'。 'L'和'R'使漫游车分别向左或向右旋转90度,而不会从当前地点移动。 'M'表示前进一个网格点,并保持相同的方向。

假设从(x,y)直接向北移动,就到了(x,y + 1)。

INPUT:

第一行输入是平台的右上角坐标,左下角坐标被假定为0,0。

其余的输入是有关已部署的漫游车的信息。每个漫游车都有两行输入。第一行给出了漫游车的位置,第二行是告诉漫游车如何探索高原的一系列指令。位置由两个整数和一个由空格分隔的字母组成,对应于x和y坐标以及漫游车当前的方向。

每个漫游车将按顺序完成,这意味着第二个漫游车在第一个漫游车完成移动之前不会开始移动。

OUTPUT:

每个漫游车的输出应该是其最终的坐标和位置。

输入输出例子

输入:

5 5

1 2 N

LMLMLMLMM

3 3 E

MMRMMRMRRM

预期产出:

1 3 N

5 1 E

代码如下:

public class MarsCarTest {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
List carList = new ArrayList();
System.out.println("请输入平台右上角坐标");
MarsCar.Max_x = sc.nextInt();
MarsCar.Max_y = sc.nextInt();
System.out.println("命令输入完毕后请输入 EXIT 退出");
while(!sc.hasNext("EXIT")){
int x = sc.nextInt();
int y = sc.nextInt();
String fx = sc.next();
getCoordinate(x, y, fx, carList, sc);
}
if(carList!=null && carList.size()>0){
MarsCar car = null;
for(int i=0; i<carList.size(); i++){//输出每辆车的坐标
car = carList.get(i);
System.out.println(car.getX()+" "+car.getY()+" "+car.getFx());
}
} else {
System.out.println("暂无车辆坐标信息!");
}
sc.close();
carList.clear();
}

//得到每辆车的最终坐标存入集合中,命令结束后打印输出
public static void getCoordinate(int x, int y, String fx, List carList, Scanner sc){
MarsCar car = new MarsCar(x,y,fx);
if(car.inspect()){
String str = sc.next();
if(str!=null && str.length()>0){
boolean isSuccess = true;//标记若是命令错误则提示重输递归
for(int i=0; i<str.length(); i++){
if("M".equals(String.valueOf(str.charAt(i)))){
car.move();
} else if("L".equals(String.valueOf(str.charAt(i)))){
car.gotoLeft();
} else if("R".equals(String.valueOf(str.charAt(i)))){
car.gotoRight();
} else {
System.out.println("命令输入错误,请重新输入!");
isSuccess = false;
break;
}
}
if(isSuccess){
carList.add(car);
} else {
getCoordinate(x, y, fx, carList, sc);
}
}
} else {
System.out.println("坐标输入错误,请重新输入!");
}
}

}

---------class  MarsCar-----------------分割线--------------------

class MarsCar {
private int x;//x坐标值
private int y;//y坐标值
private String fx;//方向
static int Max_x;//最大x值
static int Max_y;//最大y值

public MarsCar(){

}
public MarsCar(int x, int y, String fx){
this.x = x;
this.y = y;
this.fx = fx.trim();
}

//检查坐标是否合格
public boolean inspect(){
if(this.x<0||this.x>Max_x||this.y<0||this.y>Max_y||!("E".equals(this.fx)||"W".equals(this.fx)||"S".equals(this.fx)||"N".equals(this.fx))){
return false;
}
return true;
}

public int getX() {
return x;
}

//x坐标限制
public void setX(int x) {
if(x<=Max_x && x>=0){
this.x = x;
}
}

public int getY() {
return y;
}

//y坐标限制
public void setY(int y) {
if(y<=Max_y && y>=0){
this.y = y;
}
}

public String getFx() {
return fx;
}

public void setFx(String fx) {
if("E".equals(fx)||"S".equals(fx)||"W".equals(fx)||"N".equals(fx)){
this.fx = fx.trim();
}
}

//前进一步
public void move(){
if("E".equals(this.fx)){
this.x += 1;
} else if("S".equals(this.fx)){
this.y -= 1;
} else if("W".equals(this.fx)){
this.x -= 1;
} else if("N".equals(this.fx)){
this.y += 1;
}
}

//向左转
public void gotoLeft(){
if("E".equals(this.fx)){
this.fx = "N";
} else if("S".equals(this.fx)){
this.fx = "E";
} else if("W".equals(this.fx)){
this.fx = "S";
} else if("N".equals(this.fx)){
this.fx = "W";
}
}
//向右转
public void gotoRight(){
if("E".equals(this.fx)){
this.fx = "S";
} else if("S".equals(this.fx)){
this.fx = "W";
} else if("W".equals(this.fx)){
this.fx = "N";
} else if("N".equals(this.fx)){
this.fx = "E";
}
}

}

如有问题,欢迎指正。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
3年前
1995年的资深工程师,和你谈谈如何进阶
1995年的资深工程师,和你谈谈如何进阶自我介绍网络ID:杭城小刘,城市:顾名思义,人在杭州。1995年出生,本科毕业,现在是一名iOS资深工程师,年薪35w。兴趣爱好广泛:乒乓球、美食、电影、健身、山地车、养了2只布偶猫(Simba&Bella)、养花。技术领域:iOS、Web前端,写
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Linux 冲出地球,首次在火星飞行……
点击关注公众号,Java干货及时送达!(https://oscimg.oschina.net/oscnet/30275cb3753949d892e69685b218fdbc.png)2021年2月18日美东时间3:55p.m,NASA毅力号漫游车在火星的Jezero陨石坑成功着陆。毅力号重量为1.026吨,大小
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这