前几天收到某公司的面试测试题,自己是做完了。。。但是,。。。。没有得到回复。。。估计是被刷了。。。不过没啥,自己也算是经历过,主要考察面向对象的思想吧;如果有人有更好的方法的话希望可以讨论一下,~~~我发现javaeye上面居然已经有了。。。。。。
引用
一小队机器人探测器将由NASA送上火星高原,探测器将在这个奇特的矩形高原上行驶。 用它们携带的照相机将周围的全景地势图发回到地球。每个探测器的方向和位置将由一个x,y系坐标图和一个表示地理方向的字母表示出来。为了方便导航,平原将被划分为网格状。位置坐标示例:0,0,N,表示探测器在坐标图的左下角,且面朝北方。为控制探测器,NASA会传送一串简单的字母。可能传送的字母为:'L','R'和'M'。 'L',和'R'分别表示使探测器向左、向右旋转90度,但不离开他所在地点。'M' 表示向前开进一个网格的距离,且保持方向不变。假设以广场(高原)的直北方向为y轴的指向。 输入:首先输入的line是坐标图的右上方,假定左下方顶点的坐标为0,0。剩下的要输入的是被分布好的探测器的信息。每个探测器需要输入wo lines。第一条line 提供探测器的位置,第二条是关于这个探测器怎样进行高原探测的一系列说明。位置是由两个整数和一个区分方向的字母组成,对应了探测器的(x,y)坐标和方向。每个探测器的移动将按序完成,即后一个探测器不能在前一个探测器完成移动之前开始移动。 输出:每个探测器的输出应该为它行进到的最终位置坐标和方向。输入和输出 测试如下:
期待的输入:
5 5
1 2 N
LMLMLMLMM
3 3 E
MMRMMRMRRM
期待的输出
1 3 N
5 1 E
尽量少用if...else和switch.
坐标:Position.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
//���
package mars;
/**
*
* @author Allen
*/
public class Position {
private int x;
private int y;
public Position(String x,String y){
this.x = Integer.parseInt(x);
this.y = Integer.parseInt(y);
}
public void setX(int _x) {
this.x = _x;
}
public int getX() {
return this.x;
}
public void setY(int _y) {
this.y = _y;
}
public int getY() {
return this.y;
}
@Override
public String toString() {
return "(" + x + "," + y + ")";
}
}
方向Direction.java,之所以把移动和转向单独拿出来,是觉得这个东西是共性,比如你面向东方,那你左转一定是北方等等,之类的共性拿出来当一个小类。对于面向对象来说呢,这个就可以理解成探测器上面的方向控制器,喔~只要一个命令,就会计算好移动或者转向之后的位置,然后机器人在移动过去。。。有没有不同理解的?
//方向控制器,控制转向和移动。
package mars;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class Direction {
private static Direction instance;
private static ArrayList<Character> index = new ArrayList<Character>();
private static Map<Character, Integer> direction = new HashMap<Character, Integer>();
public Direction(){
index.add('N');
index.add('E');
index.add('S');
index.add('W');
direction.put('N', 1);
direction.put('E', 1);
direction.put('S', -1);
direction.put('W', -1);
}
public static Direction getInstance(){
if (instance == null){
instance = new Direction();
}
return instance;
}
public char turnTo(char faceTo,String LR){
String lr = LR.toUpperCase();
int count = (lr.equals("L") ? -1 : 1 );
char new_faceTo = index.get((index.indexOf(faceTo) + count + 4)%4);
return new_faceTo;
}
public Position moveXY(char faceTo,Position pos){
if(index.indexOf(faceTo)%2 == 1){
pos.setX(pos.getX()+direction.get(faceTo)<=0 ? 0 : pos.getX()+direction.get(faceTo) );
}else{
pos.setY(pos.getY()+direction.get(faceTo)<=0 ? 0 : pos.getY()+direction.get(faceTo));
}
return pos;
}
}
探测器Detector.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package mars;
/**
*
* @author Allen
*/
public class Detector {
private Position pos;
private char faceTo;
private String moveCmd;
public Detector(char faceTo,Position pos,String cmd){
this.pos = pos;
this.faceTo = faceTo;
this.moveCmd = cmd;
}
public void excuteCMD(Direction d){
String cmd = this.getMoveCmd();
char[] cmd_array = cmd.toUpperCase().toCharArray();
for(int i=0;i<cmd_array.length;i++){
System.out.print("\n");
if(cmd_array[i]=='M'){
this.pos = d.moveXY(this.faceTo, this.pos);
}else{
this.faceTo = d.turnTo(this.faceTo, String.valueOf(cmd_array[i]));
}
}
}
@Override
public String toString() {
return "Detector [Position: " + pos + ", faceTo: " + faceTo + ", Moving CMD: "
+ moveCmd + "]\n";
}
public String getMoveCmd() {
return moveCmd;
}
public void setMoveCmd(String moveCmd) {
this.moveCmd = moveCmd;
}
public char getFaceTo() {
return faceTo;
}
public void setFaceTo(char faceTo) {
this.faceTo = faceTo;
}
public void setPos(Position _pos){
this.pos = _pos;
}
public Position getPos(){
return this.pos;
}
}
程序入口Main.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package mars;
import java.util.*;
/**
*
* @author Allen
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//第一次使用Juint
//获取方向控制器,单例
Direction d = Direction.getInstance();
//命令接收
List<String> cmd = new ArrayList<String>();
//探测器组
List<Detector> det = new ArrayList<Detector>();
Scanner sc = new Scanner(System.in);
System.out.print("输入‘exit’退出:\n");
String str = sc.nextLine();
while (!str.toUpperCase().equals("EXIT")) {
cmd.add(str);
str = sc.nextLine();
}
//验证命令,看是否数目准确;
if(cmd.size()%2!=1){
System.out.print("请输入正确的命令数量。");
}
String[] maxXY = cmd.get(0).split(" ");
Position maxPos = new Position(maxXY[0].trim(),maxXY[1].trim());
//初始化探测器,并让他执行命令
for(int i=1;i<cmd.size();i+=2){
String[] tmp = cmd.get(i).split(" ");
Detector det_tmp = new Detector(tmp[2].toUpperCase().charAt(0),new Position(tmp[0],tmp[1]),cmd.get(i+1));
//控制器初始化之后运行。
det_tmp.excuteCMD(d);
//防止越界,理论上是应该放在方向类中,但是这是后面添加的,所以没有去该,这个不符合面向对象的思想。。。
det_tmp.getPos().setX(det_tmp.getPos().getX() <= maxPos.getX() ? det_tmp.getPos().getX() : maxPos.getX());
det_tmp.getPos().setY(det_tmp.getPos().getY() <= maxPos.getY() ? det_tmp.getPos().getY() : maxPos.getY());
det.add(det_tmp);
}
// 输出探测器信息;
for(int i=0;i<det.size();i++){
System.out.print(det.get(i));
}
}
}
呵呵,第一次接触到比较正规的测试题,做这种题目才有兴趣~~~
分享到:
相关推荐
Java面试题:Java基础方面的题型,包括问题和答案哦
│ Java面试题80:java访问redis级redis集群?.mp4 │ Java面试题81:微信公众号分类和微信开发原理.mp4 │ Java面试题82:怎么把微信和业务平台进行绑定.mp4 │ Java面试题83:项目的分类和项目参与者.mp4 │ Java...
【计算机和JAVA 面试题大全】 在计算机科学与技术领域,尤其是软件开发行业,Java是一种广泛应用的编程语言,以其跨平台、面向对象和高效性而受到赞誉。本资料集涵盖了丰富的Java面试题,旨在帮助求职者准备Java...
常见的java面试题,包括: JAVA面试题集基础篇.pdf JAVA面试题集编程篇.pdf JAVA面试题集高级篇.pdf 就业面试题库(数据库).pdf 数据库.pdf
JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...
1、01Java面试题、面经.pdf 2、 并发编程面试专题.pdf 3、 并发面试题.pdf 4、 多线程,高并发.pdf 5、 多线程面试59题(含答案).pdf 6、 集合框架.pdf 7、 面试必备之乐观锁与悲观锁.pdf 8、 设计模式面试专题.pdf...
以下是对标题和描述中涉及的一些常见Java面试题的详细解释: 1. **JDK 和 JRE 的区别** JDK(Java Development Kit)是用于开发和调试Java程序的完整工具集,包括JRE(Java Runtime Environment)、编译器(javac...
最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 ...15、张孝祥整理Java就业面试题大全
"Java 面试题及其答案.doc"和"JAVA面试题.doc"提供了大量的面试题及解答,涵盖了从基础知识到高级特性的广泛范围,包括反射、注解、设计模式、Spring框架、数据库操作等。通过这些题目,求职者可以自我评估,了解...
《可伸缩服务架构:框架与中间件》
以后会慢慢把Java相关的面试题、计算机网络等都加进来,其实这不仅仅是一份面试题,更是一份面试参考,让你熟悉面试题各种提问情况,当然,项目部分,就只能看自己了,毕竟每个人简历、实习、项目等都不一样。面试题...
"2017java面试题"这个压缩包文件提供了丰富的资源,帮助Java开发者准备面试,深化对Java开发的理解。 文档"Java面试宝典2017.doc"可能包含了以下核心Java知识点: 1. **基础语法**:这包括变量、数据类型、运算符...
附有面试讲解视频,不是网盘,下载既有视频,屡试不爽的面试宝典。 Java面试题01.面试的整体流程 Java面试题02.java的垮平台原理 Java面试题03....Java面试题04.java中...Java面试题80:java访问redis级redis集群 ......
答:Java 中的事件机制是指监听器模式。事件源是发生事件的地方,事件监听器是响应事件的对象。事件源和事件监听器之间通过事件对象进行交互。 5. EJB 与 JavaBean 的区别 答:EJB(Enterprise JavaBean)是 Sun ...
java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理
2024java面试题2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最...
2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...
这份资源是一份2023年Java面试题集,适用于准备Java开发岗位面试的人员。本资源收集了大量的Java面试题,旨在帮助读者熟悉Java编程语言以及相关的编程技术和知识点,从而在面试中更好地展现自己的能力和潜力。本资源...
这份"java面试题总结资料"涵盖了多个Java核心领域的关键知识点,包括但不限于: 1. **基础语法**:理解基本的数据类型(如整型、浮点型、字符型和布尔型),变量的声明与使用,以及运算符的优先级。同时,要熟悉...