解题3(CoordinateCalculate)
题目描述
开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
输入:
合法坐标为A(或者D或者W或者S) + 数字(两位以内)
坐标之间以;分隔。
非法坐标点需要进行丢弃。如AA10; A1A; $%$; YAD; 等。
下面是一个简单的例子 如:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
处理过程:
起点(0,0)
+ A10 = (-10,0)
+ S20 = (-10,-20)
+ W10 = (-10,-10)
+ D30 = (20,-10)
+ x = 无效
+ A1A = 无效
+ B10A11 = 无效
+ 一个空 不影响
+ A10 = (10,-10)
结果 (10, -10)
输入描述:
一行字符串
输出描述:
最终坐标,以,分隔
输入
- A10;S20;W10;D30;X;A1A;B10A11;;A10;
输出
- 10,-10
代码如下:
- package com.yzh.hehe;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Scanner;
- public class CoordinateCalculate {
- public static void main(String[] args) {
- Scanner scanner=new Scanner(System.in);
- while (scanner.hasNext()) {
- String coordinate=scanner.nextLine();
- calculateCoordinate(coordinate);
- }
- scanner.close();
- }
- //根据输入的坐标字符串,移动坐标,得到最后结果
- private static void calculateCoordinate(String coordinate) {
- String[] coorArr=coordinate.split(";");
- List<String>list=new ArrayList<String>(200);
- for (String string : coorArr) {
- if (isCoordinate(string)) {
- list.add(string);
- }
- }
- CoordinateOBJ coordinateOBJ=new CoordinateOBJ(0,0);
- for (String string : list) {
- moveCoordinate(coordinateOBJ, string);
- }
- System.out.println(coordinateOBJ.getX()+","+coordinateOBJ.getY());
- }
- //判断坐标是否合法(合法坐标为A(或者D或者W或者S) + 数字(两位以内))
- private static boolean isCoordinate(String coordinate) {
- if(coordinate==null ){
- return false;
- }
- coordinate=coordinate.trim();
- if("".equals(coordinate) ){
- return false;
- }
- if (!(coordinate.length()>1&&coordinate.length()<4)) {
- return false;
- }
- char c=coordinate.charAt(0);
- if (!(c=='W'||c=='S'||c=='A'||c=='D')) {
- return false;
- }
- //正则表达式判断
- if (!(coordinate.substring(1).matches("[0-9]+"))) {
- return false;
- }
- //效果同上
- // if (!(coordinate.charAt(1)<='9'&&coordinate.charAt(1)>='0')) {
- // return false;
- // }
- // if (coordinate.length()==2) {
- // return true;
- // }
- // if (!(coordinate.charAt(2)<='9'&&coordinate.charAt(2)>='0')) {
- // return false;
- // }
- return true;
- }
- //一次移动坐标
- private static void moveCoordinate(CoordinateOBJ coordinate,String move) {
- char c=move.charAt(0);
- int value=Integer.valueOf(move.substring(1));
- if(c=='A'){
- coordinate.setX(coordinate.getX()-value);
- }else if (c=='W') {
- coordinate.setY(coordinate.getY()+value);
- }else if (c=='S') {
- coordinate.setY(coordinate.getY()-value);
- }else {
- coordinate.setX(coordinate.getX()+value);
- }
- }
- }
- class CoordinateOBJ{
- private int x;
- private int y;
- protected CoordinateOBJ(int x,int y){
- this.x=x;
- this.y=y;
- }
- public void setX(int x) {
- this.x=x;
- }
- public void setY(int y) {
- this.y=y;
- }
- public int getX() {
- return this.x;
- }
- public int getY() {
- return this.y;
- }
- }
解题3(CoordinateCalculate)的更多相关文章
- SCNU ACM 2016新生赛决赛 解题报告
新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- HDU 3791二叉搜索树解题(解题报告)
1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- wechall.net/stegano 解题心得
/* 转载请注明出处:http://www.cnblogs.com/Martinium/p/wechall_stegano.html */ 最近迷上了 www.wechall.net 网站,里面都是些 ...
- Mountains(CVTE面试题)解题报告
题目大意: 用一个数组代表群山的高度.高度大的地方代表山峰,小的地方代表山谷.山谷可以容水.假设有一天下了大雨,求群山中总共可以容纳多少水? 如图所示情况,a代表该数组,总共可以容纳5个水. 解题思路 ...
- timus 1180. Stone Game 解题报告
1.题目: 1180. Stone Game Time limit: 1.0 secondMemory limit: 64 MB Two Nikifors play a funny game. The ...
- timus 1175. Strange Sequence 解题报告
1.题目描述: 1175. Strange Sequence Time limit: 1.0 secondMemory limit: 2 MB You have been asked to disco ...
随机推荐
- <Linux> 文件夹右下角有锁,解锁
sudo chown -R $USER 文件夹路径 例如:sudo chown -R $USER ~/scala
- github构建个人网站模板
http://novoland.github.io/%E5%B9%B6%E5%8F%91/2014/09/11/ThreadLocal%20%E5%88%86%E6%9E%90.html
- 《算法》第一章部分程序 part 1
▶ 书中第一章部分程序,加上自己补充的代码,包括若干种二分搜索,寻找图上连通分量数的两种算法 ● 代码,二分搜索 package package01; import java.util.Arrays; ...
- eclipse中无法新建Android工程 出现问题:Plug-in org.eclipse.ajdt.ui was unable to load
转自:http://www.bubuko.com/infodetail-757338.html eclipse中打开后新建Android项目区仍无法创建,出现下列提示对话框: Plug-in org. ...
- delphi 连接DBF
delphi 连接DBF 使用 DBF 文件时,文件夹表示数据库,单个 DBF 文件表示表 1.BDE,已淘汰 table1.Databasename:=dbdir;//设置库路径table1.Tab ...
- python 阿狸的进阶之路(4)
装饰器 #1.开放封闭原则:对扩展开放,对修改是封闭#2.装饰器:装饰它人的,器指的是任意可调用对象,现在的场景装饰器->函数,被装饰的对象也是->函数#原则:1.不修改被装饰对象的源代码 ...
- Delphi 使用MD5 比对文件
使用MD5的方法比对CXimage里图片是否改变: Delphi7实现方法: uses IdHashMessageDigest function TForm1.GetImageMD5(cxImage: ...
- android 环境变量
1.新建一个环境变量和系统变量名称为ANDROID_HOME,变量值为当前安装SDK的目录 2.把%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools添 ...
- html 自定义属性的获取和应用
在html 中,我们可以给元素设置自定义属性,格式: data-属性="属性值",可以设置一个,也可以设置多个 1.获取元素属性的常规方法:直接获取元素,然后使用getAttri ...
- java-部分精选面试题
JVM的类加载机制是什么?有哪些实现方式? 类加载机制: 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法去内,然后在堆区创建一个java.lang.Clas ...