一个demo

 

package com.entity;

/*2015-7-18*/
public class Rover {
    private CurrentPosition position;

    public Rover(CurrentPosition position) {
        super();
        this.position = position;
    }

    public String doTask(String input) {
        for (int i = 0; i < input.length(); i++) {
            char singleCommand = input.charAt(i);
            this.position.doTask(Command.valueOf(String.valueOf(singleCommand)));
        }

        return this.position.toString();
    }

}

 

package com.entity;

import javax.swing.JOptionPane;

/*2015-7-18*/
public class CurrentPosition {
    private Position position;
    private int currentX;
    private int currentY;
    private int maxX;
    private int maxY;

    public CurrentPosition(Position position, int x, int y) {
        super();
        this.position = position;
        this.currentX = x;
        this.currentY = y;
    }

    public void setBounds(int maxX, int maxY) {
        this.maxX = maxX;
        this.maxY = maxY;
    }

    public CurrentPosition(String orginal, int x, int y) {
        this(Position.valueOf(orginal), x, y);
    }

    public void doTask(Command command) {
        int targetOrdinal = -1;
        switch (command) {
        case L:
            if (this.position.ordinal() == 0) {
                targetOrdinal = 3;
            } else {
                targetOrdinal = this.position.ordinal() - 1;
            }
            break;
        case R:
            if (this.position.ordinal() == 3) {
                targetOrdinal = 0;
            } else {
                targetOrdinal = this.position.ordinal() + 1;
            }
            break;
        case M:
            targetOrdinal = this.position.ordinal();
            changeXY();
            break;
        default:
            JOptionPane.showMessageDialog(null, "Invalid command:" + command + ".Must L、R、M");
            break;
        }
        this.position = this.position.valueOf(targetOrdinal);
    }

    private void changeXY() {
        switch (this.position) {
        case E:
            this.currentX++;
            break;
        case S:
            this.currentY--;
            break;
        case W:
            this.currentX--;
            break;
        case N:
            this.currentY++;
            break;
        }
    }

    @Override
    public String toString() {
        if (currentX > maxX || currentY > maxY) {
            return "RIP";
        }
        return currentX + " " + currentY + " " + position;
        // return "CurrentPostion [position=" + position + ", x=" + currentX +
        // ", y=" + currentY + "]";
    }

}

enum Command {
    L,
    R,
    M;
}

enum Position {
    E, // 0
    S,
    W,
    N;
    public Position valueOf(int ordinal) {
        if (ordinal >= values().length || ordinal < 0) {
            throw new IllegalArgumentException("invalid :" + ordinal);
        }
        return values()[ordinal];
    }
}
package com.entity;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

/*2015-7-18*/
public class RoverTest {
    @Test
    public void shoultGet13N_when_LMLMLMLMM_is_Given() {
        CurrentPosition currentPostion = new CurrentPosition("N", 1, 2);
        currentPostion.setBounds(5, 5);
        Rover rover = new Rover(currentPostion);
        assertEquals(rover.doTask("LMLMLMLMM"), "1 3 N");
    }

    @Test
    public void shoultGet51E_when_MMRMMRMRRM_is_Given() {
        CurrentPosition currentPostion = new CurrentPosition("E", 3, 3);
        currentPostion.setBounds(5, 5);
        Rover rover = new Rover(currentPostion);
        assertEquals(rover.doTask("MMRMMRMRRM"), "5 1 E");
    }

    @Test
    public void shoultGetRIP_when_MMM_is_Given() {
        CurrentPosition currentPostion = new CurrentPosition("N", 4, 4);
        currentPostion.setBounds(5, 5);
        Rover rover = new Rover(currentPostion);
        assertEquals(rover.doTask("MMRMMRMRRM"), "RIP");
    }

}

input:

5 5
1 2 N
LMLMLMLMM
3 3 E
MMRMMRMRRM
4 4 N
MMM
package com;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import com.entity.CurrentPosition;
import com.entity.Rover;

/*2015-7-18*/
public class Controller {
    public static void main(String[] args) throws IOException {
        File input = new File("input.txt");
        BufferedReader reader = new BufferedReader(new FileReader(input));
        String line;
        int currentLine = 1;
        int maxX = -1;
        int maxY = -1;
        CurrentPosition currentPostion = null;
        while ((line = reader.readLine()) != null) {
            if (currentLine == 1) {
                String[] bounds = line.split(" ");
                maxX = Integer.parseInt(bounds[0]);
                maxY = Integer.parseInt(bounds[1]);
            } else if (currentLine % 2 == 0) {
                String[] location = line.split(" ");
                currentPostion = new CurrentPosition(location[2], Integer.parseInt(location[0]), Integer.parseInt(location[1]));
                currentPostion.setBounds(maxX, maxY);
            } else {
                Rover rover = new Rover(currentPostion);
                System.out.println(rover.doTask(line));
            }
            currentLine++;
        }
        reader.close();

    }

}

Output:

1 3 N
5 1 E
RIP

 

http://www.cnblogs.com/softidea/p/3760235.html

 

时间: 2025-01-21 11:52:03

一个demo的相关文章

一个Demo让你掌握Android所有控件

原文:一个Demo让你掌握Android所有控件 本文是转载收藏,侵删,出处:"安卓巴士"       下面给出实现各个组件的源代码: 1.下拉框实现--Spinner [java] view plaincopyprint? package com.cellcom;      import java.util.ArrayList;   import java.util.List;      import android.app.Activity;   import android.os

请求网络数据-怎么请求聚合数据的数据,求一个demo,谢谢各位大神

问题描述 怎么请求聚合数据的数据,求一个demo,谢谢各位大神 我自己做的请求不出来数据,下面上一个类的代码.请大神指点指点 package com.action; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.i

cocos2d x-cocos如何将事件监听封装到自定义的精灵类中,求一个demo

问题描述 cocos如何将事件监听封装到自定义的精灵类中,求一个demo cocos如何将事件监听封装到自定义的精灵类中,求一个demo.每次创建新的精灵时就会添加触摸监听.在其他层中可以拖拽移动这些添加到层中的精灵 解决方案 把你的方法放进init()里面,继承layer或者node,create()后就会调用.具体的点击事件,你可以百度,很多 解决方案二: 把你的方法放进init()里面,继承layer或者node,create()后就会调用.具体的点击事件,你可以百度,很多 解决方案三:

javascript-深夜了还有前端的大神吗,我写了一个Demo但是没调明白,求大神帮看下?

问题描述 深夜了还有前端的大神吗,我写了一个Demo但是没调明白,求大神帮看下? <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script> <style type="text/css&q

谢谢-急需Java 供外部调用的api的一个demo实例

问题描述 急需Java 供外部调用的api的一个demo实例 写接口把json格式封装起来 用post请求的接口的方式 框架用springmvc 解决方案 参考: http://my.oschina.net/haopeng/blog/324934 解决方案二: 就是用springmvc返回一个json就可以

求一个Demo,用户在微信中访问页面时,页面输出用户的微信用户名

问题描述 高分求一个显示微信登录用户名的DEMO,最好能显示用户名和当前所在的地址,输出到页面上 解决方案 解决方案二:要完成这个功能不是只有简单的网页能实现的,这涉及到微信生态系统,是需要有公众号帐号配合的.解决方案三:额,公众号是有的...解决方案四:引用1楼tcmakebest的回复: 要完成这个功能不是只有简单的网页能实现的,这涉及到微信生态系统,是需要有公众号帐号配合的. 我是这样想的,所有东西配置全后,我其实是想得到对方微信的一个永久id,这个id作为我开发的网站的用户名,写入ses

求助IO流这块的一个demo里面的问题

问题描述 packagecom.lk.example;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.i

Android调用Jni,非常简单的一个Demo

step1:创建一个android项目      Project Name:jnitest      Build Target: Android 1.6      Application Name: JNI Test      Package Name: org.eshock.jnitest      Create Activity: JNITest JNITest.java类代码: import android.app.Activity;   import android.os.Bundle;

给小弟一个demo学习吧-谁有九宫格lockpattern解锁的例码或者知道怎么用?

问题描述 谁有九宫格lockpattern解锁的例码或者知道怎么用? 请先看完我的需求 网上的九宫格都存在一个问题,三个点连接时可以跳过当中一个点直接连接头尾两端.这样有隐患不好. Github上有开源的,但是只有最新版本基于stadio平台的,我想要eclipse平台的. csdn上有个3.0的老版本,但始终用不了(或许是我用法不对,希望有大神指点一下) 总之希望有大神能发一份简单能运行的例码并包含相应库文件,或者能指点一下最新版本或3.0版本怎么用,先谢谢了 解决方案 google官方都快要

List subList()的一个demo

  只要保证toIndex不大于size并且fromIndex不大于toIndex即可(谁会传一个负数的下标呢?) public List<E> subList(int fromIndex, int toIndex) { subListRangeCheck(fromIndex, toIndex, size); return new SubList(this, 0, fromIndex, toIndex); } static void subListRangeCheck(int fromInde