- 浏览: 659992 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (345)
- java (63)
- Struts2 (11)
- Spring2.5 + (17)
- Hibernate (25)
- Struts2 Spring hibernate (5)
- log4j (3)
- apache tomcat (12)
- oracle (22)
- oracle_存储过程 (4)
- mysql (18)
- jquery (11)
- prototype (5)
- js (19)
- quartz (5)
- 设计模式 (6)
- eclipse/MyEclipse 注意事项 (9)
- eclipse (0)
- css (6)
- 正则表达式 (2)
- linux (18)
- PHP (6)
- 多线程 (20)
- XML (1)
- jstl (3)
- mongoDB (7)
- android (20)
- 反射 (1)
- IOS (46)
- SVN (3)
- C/C++ (4)
- 百度地图 (2)
- IO/SOCKET (3)
- 百度地图JS (1)
- 树莓派/香蕉派 (1)
最新评论
-
anny101:
想转发一下,不知道怎么转发。评论一下吧。方便查看。
fetch = FetchType.EAGER 作用 -
Navee:
果然我这也是是防火墙问题
解决 Linux 安装 httpd局域网无法访问 -
dhyang909:
...
oracle 10g+ 行列转换 -
国产希特勒:
真强,居然有人把公司的面试题挂到javaeye上了
锦江国际的一道面试题(很简单) -
tomfish88:
比如我要拦截不同业务的service类里面的方法 @Poi ...
Spring AOP annotation 拦截表达式 分析
一个机器人可以左转,右转,前移,将这个机器人放置在一个矩形内行走,机器人位置由一个 x,y 系坐标系和一个朝向确定。地理方向的 N, S, W,E 分别表示矩形的上下左右。
示例 : 位置坐标 X=0 , Y=0 , N. 表示机器人在矩形坐标系的左下角 , 面朝上。
为控制机器人的动作,需传送一串简单的字母。传送的字母为: L 、 R 和 M 。
L 和 R 分别表示使机器人向左、向右旋转 90 度。但不离开它所在地点; M 表示向前开进一个单位的距离,且保持方向不变 .
期待输入:
1 )输入初始化矩形的大小为 50 x 50
2) 输入机器人的初始化大小为 X=10,Y=10,N
3) 输入指令 MMLMMR
期待输出:
机器人的坐标及方位
X=8 , Y=12, N
要求
开发语言和工具
JAVA , Junit
如果按照题目,实现是很简单的。
Dir.java
package interview; public enum Dir { N, S, W, E }
Swerve.java
package interview; public enum Swerve { L, R, M; }
Map.java
package interview; /** * 地图类 * * @author mah * */ public class Map { /** * 横轴 */ private int x; /** * 纵轴 */ private int y; /** * 地图 */ private String[][] myMap; public Map(int x, int y) { this.x = x; this.y = y; this.myMap = new String[x][y]; } /** * 输出地图 * @return */ public String[][] output() { for (int i = 0; i < this.x; i++) { for (int j = 0; j < this.y; j++) { myMap[i][j] = i + "," + j; } } //数组上下倒转 String[][] fanzhuan = new String[x][y]; for (int i = 0; i < myMap.length; i++) { fanzhuan[i] = myMap[myMap.length-1 - i]; } this.myMap = fanzhuan; return myMap; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public String[][] getMyMap() { return myMap; } public void setMyMap(String[][] myMap) { this.myMap = myMap; } public static void main(String[] args) { int x = 5; int y = 10; Map m = new Map(x, y); String [][] a = m.output(); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { System.out.print(a[i][j] + " | "); } System.out.println(); } } }
Robot.java
package interview; /** * 机器人类 * * @author mah */ public class Robot { /** * 横坐标轴 */ private int x; /** * 竖坐标轴 */ private int y; /** * 朝向 N S W E */ private String dir; /** * * @param x x轴 * @param y y轴 * @param dir 朝向 N S W E */ public Robot(int x, int y, String dir) { this.x = x; this.y = y; this.dir = dir; } /** * 移动 * @param swerve 转向 L,R */ public void move() { this.dir = this.dir.toUpperCase(); if(this.dir.equals(Dir.N.toString())) { this.y = this.y + 1; } else if(this.dir.equals(Dir.S.toString())) { this.y = this.y - 1; } else if(this.dir.equals(Dir.W.toString())) { this.x = this.x - 1; } else if(this.dir.equals(Dir.E.toString())) { this.x = this.x + 1; } } /** * 转向 * @param swerve L,R */ public void swerve(String swerve) { this.dir = this.dir.toUpperCase(); swerve = swerve.toUpperCase(); if(this.dir.equals(Dir.N.toString())) { if(swerve.equals(Swerve.L.toString())) { this.dir = Dir.W.toString(); } else if(swerve.equals(Swerve.R.toString())) { this.dir = Dir.E.toString(); } } else if(this.dir.equals(Dir.S.toString())) { if(swerve.equals(Swerve.L.toString())) { this.dir = Dir.E.toString(); } else if(swerve.equals(Swerve.R.toString())) { this.dir = Dir.W.toString(); } } else if(this.dir.equals(Dir.W.toString())) { if(swerve.equals(Swerve.L.toString())) { this.dir = Dir.S.toString(); } else if(swerve.equals(Swerve.R.toString())) { this.dir = Dir.N.toString(); } } else if(this.dir.equals(Dir.E.toString())) { if(swerve.equals(Swerve.L.toString())) { this.dir = Dir.N.toString(); } else if(swerve.equals(Swerve.R.toString())) { this.dir = Dir.S.toString(); } } } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public String getDir() { return dir; } public void setDir(String dir) { this.dir = dir; } public String toString() { return "位于" + this.x + "," + this.y + ", " + "面朝 " + this.dir; } }
Test.java(这里没用JUnit)
package interview; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { Map map = new Map(51,51); Robot robot = new Robot(10, 10, "N"); Operator op = new Operator(map, robot); while (true) { Scanner input = null; input = new Scanner(System.in); String dictate = null; if(input != null) { dictate = input.nextLine().toLowerCase(); } if(dictate.equals("exit")) { break; } else { Pattern p = Pattern.compile("[lrm]*", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(dictate); boolean flag = m.matches(); if(flag) { String errStr = op.isOut(robot, dictate); if(errStr != null) { System.out.println(errStr); } else { System.out.println("目前:" + robot.toString()); } } else { System.out.println("指令错误,请重新输入(L,R,M)"); } } } } }
package interview; public class Operator { /** * 地图类 */ private Map map; /** * 机器人类 */ private Robot robot; public Operator(Map map, Robot robot) { this.map = map; this.robot = robot; } public void toSwerve(String swerve) { this.robot.swerve(swerve); //System.out.println("当前方向为" + robot.getDir()); } /** * 移动 * @param dictate 指令 */ public void tomove(String dictate) { String errStr = isOut(this.robot, dictate); if(errStr != null) { System.out.println(errStr); } else { System.out.println(robot.toString()); } } /** * 判断是否超出地图边界 * 地图边界:上边界为y,下边界为0,左边界为0,右边界为x * @param x * @param y * @param dictate 指定 * @return 如果为null,则没超出边界,如果不为null,则抛出信息 */ public String isOut(Robot robot, String dictate){ int ori_x = robot.getX(); int ori_y = robot.getY(); String ori_dir = robot.getDir(); char[] dics = dictate.toCharArray(); for (int i = 0; i < dics.length; i++) { String newdics = String.valueOf(dics[i]).toUpperCase(); if(newdics.equals(Swerve.M.toString())) { robot.move(); } else { robot.swerve(newdics); } } if(robot.getX() < 0 || robot.getX() > map.getX()) { this.robot.setX(ori_x); this.robot.setY(ori_y); this.robot.setDir(ori_dir); return "x轴超出边界,返回原点。"; } if(robot.getY() < 0 || robot.getY() > map.getY()) { this.robot.setX(ori_x); this.robot.setY(ori_y); this.robot.setDir(ori_dir); return "y轴超出边界,返回原点。"; } return null; } public String printInfo() { return this.robot.toString(); } public Map getMap() { return map; } public void setMap(Map map) { this.map = map; } public Robot getRobot() { return robot; } public void setRobot(Robot robot) { this.robot = robot; } }
到这里就实现了这个面试题
但在面试时,面试官又问:如果有2个机器人,或者N多个机器人,如何让多个机器人不会撞到一起(或者撞到一起后,给2个机器人提示)
评论
3 楼
国产希特勒
2012-07-09
真强,居然有人把公司的面试题挂到javaeye上了
2 楼
hongmin118
2012-03-07
caofaping 写道
Operator 这个类呢?大哥。。
Operator类已补
1 楼
caofaping
2012-02-23
Operator 这个类呢?大哥。。
发表评论
-
fastjson格式化日期 时间
2016-07-19 10:23 757@JSONField (format="HH ... -
将博客搬至CSDN
2014-11-24 10:03 18将博客搬至CSDN -
centos 安装 java7,tomcat7,mysql5.6,mongodb
2014-10-24 11:30 917chkconfig --list tomcat7 ... -
mongodb 分组 得到第一条数据
2014-10-06 13:52 2094业务逻辑: 控制器每分钟上报采集数据,现需得到每个控制器 ... -
2进制,10进制,16进制
2014-08-19 16:39 1021// 1个字节8位,最大可表示255 // 2进 ... -
Buffer的基本用法
2014-08-14 11:47 7381、对buffe.put(**)后,都要buffer.fl ... -
mongodb删除已处理过的数据,即非新增数据
2014-08-12 17:36 550/** * 删除已处理过的数据( ... -
编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC
2014-08-07 13:10 2328package test1; import j ... -
java 多线程 笔试题
2014-08-07 12:30 12591、4线程,2个对i加,2个对i减 2、实现孙线程 ... -
基于ArrayBlockingQueue的生产者和消费者
2014-08-06 23:02 744学习写的测试,可能有BUG。 有了ArrayBlocki ... -
每隔一秒打印一次日志,共16秒打印完,加4个线程修改程序,使之4秒打印完
2014-08-06 17:20 1167原来的程序: package test1; publ ... -
通过semaphore信号灯,开启多个线程,但只并发3个线程
2014-08-04 22:07 920package com.mhm.test1; ... -
用锁实现缓存机制
2014-08-01 14:11 827package test1; import java. ... -
用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
2014-08-01 13:50 858package test1; import java. ... -
用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
2014-08-01 13:49 1package test1; import ja ... -
通过代码,解释ExecutorService基本用法
2014-07-29 17:49 597package test1; import ja ... -
4线程,2个对i加,2个对i减
2014-07-29 16:23 857package test1; /** * 设计 ... -
简单多线程卖票代码
2014-07-29 15:45 853public class Thread2 { pu ... -
通过代码,了解ThreadLocal
2014-07-29 14:06 540在看此代码时,先看http://www.iteye.com ... -
子线程先执行10次,主线程执行5次,子线程再执行10次,主线程再执行5次,如此反复3次
2014-07-28 22:21 791package com.mhm.test1; / ...
相关推荐
根据提供的文件信息,上海锦江国际酒店发展股份有限公司2018年度财务报表分析报告涵盖了该公司2016-2018三年的财务数据,报告重点分析了资产负债表、利润表、现金流量表和所有者权益变动表,并通过水平、垂直分析...
【员工薪酬管理系列模板-锦江国际大酒店绩效考核方案】 绩效考核是企业管理和人力资源管理的重要组成部分,对于激发员工积极性、提升工作效率以及实现企业战略目标具有关键作用。锦江国际大酒店的绩效考核方案详细...
上海锦江国际酒店.docx
锦江国际大酒店绩效考核方案.doc
【蚌埠锦江国际大酒店计算机网络系统设计方案】 1. 概述: 蚌埠锦江国际大酒店的计算机网络系统设计方案旨在提供高效、稳定、安全的网络环境,满足酒店日常运营、客户服务及内部管理的需求。该方案考虑了酒店的规模...
蚌埠锦江国际大酒店计算机网络系统设计方案.doc
锦江之星旅馆有限公司系中国规模最大的综合性旅游企业集团——锦江国际集团的子公司,是经营管理中国经济型连锁旅馆“锦江之星”的专业公司。公司创立于1996年,注册资本人民币17297万元。“锦江之星”为上海市著名...
Casestudy_锦江国际酒店管理有限公司_20120423f.docx
Case Study_锦江国际酒店管理有限公司_2P_20120508.PDF
为了帮助企业应对来自业务和技术方面的挑战,微软公司私有云和System Center 2012解决方案为锦江酒庖的国际的IT管理运营提供了更大的灵活性和可操作性,有效地支撑了IT的组织架构从分散到集中的变革,为企业追求卓越...
蚌埠锦江国际大酒店计算机网络系统设计方案(DOC 31页)
在四川大学锦江学院的大三下学期,学生们将深入学习这些关键领域,以准备他们在未来的职业生涯。本资源集合了针对这个阶段学生的重要复习资料,特别是针对编译原理、嵌入式系统、计算机图形学以及软件开发这四门核心...
酒店行业案例:协同共赢—解构上海锦江国际酒店协同管理平台实用.pdf
"成都市锦江区初2022届语文“一诊”考试题(附答案)实用.pdf" 本资源是2022届锦江区初中生语文“一诊”考试题,附带答案,旨在帮助学生更好地备战语文考试。本考试题涵盖了多个方面的知识点,包括文学作品分析、语言...
此文档是2019年成都市锦江区初中三年级的一次英语模拟考试试题,包含听力、选择题等多种题型,旨在检测学生在英语学科的学业质量。以下是相关知识点的详细说明: 1. **考试结构**:该试卷分为A卷和B卷,A卷满分为...
这份资料是2018年成都市中考锦江区第二次诊断性考试的数学试卷,主要测试九年级学生的数学知识和技能。试卷包含选择题、填空题和解答题等多个部分,涉及了多个数学知识点。 1. 绝对值:题目1问到-3的绝对值,绝对值...
上海锦江集团国际管理公司的资产化经营和实体化管理策略是其成功的关键因素。资产化经营是指集团将资产管理和业务经营分开,总部专注于资产的运营和增值,而下属子公司负责具体的业务活动。这一模式旨在提高资产利用...
锦江7月份.xls