题目描述

开发一个坐标计算工具, 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)

输入描述:

一行字符串

输出描述:

最终坐标,以,分隔

示例1

输入

  1. A10;S20;W10;D30;X;A1A;B10A11;;A10;

输出

  1. 10,-10

代码如下:

  1. package com.yzh.hehe;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Scanner;
  6.  
  7. public class CoordinateCalculate {
  8.  
  9. public static void main(String[] args) {
  10. Scanner scanner=new Scanner(System.in);
  11. while (scanner.hasNext()) {
  12. String coordinate=scanner.nextLine();
  13. calculateCoordinate(coordinate);
  14. }
  15. scanner.close();
  16. }
  17.  
  18. //根据输入的坐标字符串,移动坐标,得到最后结果
  19. private static void calculateCoordinate(String coordinate) {
  20. String[] coorArr=coordinate.split(";");
  21. List<String>list=new ArrayList<String>(200);
  22. for (String string : coorArr) {
  23. if (isCoordinate(string)) {
  24. list.add(string);
  25. }
  26. }
  27. CoordinateOBJ coordinateOBJ=new CoordinateOBJ(0,0);
  28. for (String string : list) {
  29. moveCoordinate(coordinateOBJ, string);
  30. }
  31. System.out.println(coordinateOBJ.getX()+","+coordinateOBJ.getY());
  32. }
  33. //判断坐标是否合法(合法坐标为A(或者D或者W或者S) + 数字(两位以内))
  34. private static boolean isCoordinate(String coordinate) {
  35.  
  36. if(coordinate==null ){
  37. return false;
  38. }
  39. coordinate=coordinate.trim();
  40. if("".equals(coordinate) ){
  41. return false;
  42. }
  43. if (!(coordinate.length()>1&&coordinate.length()<4)) {
  44. return false;
  45. }
  46. char c=coordinate.charAt(0);
  47. if (!(c=='W'||c=='S'||c=='A'||c=='D')) {
  48. return false;
  49. }
  50. //正则表达式判断
  51. if (!(coordinate.substring(1).matches("[0-9]+"))) {
  52. return false;
  53. }
  54. //效果同上
  55. // if (!(coordinate.charAt(1)<='9'&&coordinate.charAt(1)>='0')) {
  56. // return false;
  57. // }
  58. // if (coordinate.length()==2) {
  59. // return true;
  60. // }
  61. // if (!(coordinate.charAt(2)<='9'&&coordinate.charAt(2)>='0')) {
  62. // return false;
  63. // }
  64. return true;
  65. }
  66. //一次移动坐标
  67. private static void moveCoordinate(CoordinateOBJ coordinate,String move) {
  68. char c=move.charAt(0);
  69. int value=Integer.valueOf(move.substring(1));
  70. if(c=='A'){
  71. coordinate.setX(coordinate.getX()-value);
  72. }else if (c=='W') {
  73. coordinate.setY(coordinate.getY()+value);
  74. }else if (c=='S') {
  75. coordinate.setY(coordinate.getY()-value);
  76. }else {
  77. coordinate.setX(coordinate.getX()+value);
  78. }
  79. }
  80.  
  81. }
  82. class CoordinateOBJ{
  83. private int x;
  84. private int y;
  85. protected CoordinateOBJ(int x,int y){
  86. this.x=x;
  87. this.y=y;
  88. }
  89.  
  90. public void setX(int x) {
  91. this.x=x;
  92. }
  93. public void setY(int y) {
  94. this.y=y;
  95. }
  96. public int getX() {
  97. return this.x;
  98. }
  99. public int getY() {
  100. return this.y;
  101. }
  102. }

解题3(CoordinateCalculate)的更多相关文章

  1. SCNU ACM 2016新生赛决赛 解题报告

    新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...

  2. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  3. HDU 3791二叉搜索树解题(解题报告)

    1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...

  4. 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划

    [BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...

  5. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  6. wechall.net/stegano 解题心得

    /* 转载请注明出处:http://www.cnblogs.com/Martinium/p/wechall_stegano.html */ 最近迷上了 www.wechall.net 网站,里面都是些 ...

  7. Mountains(CVTE面试题)解题报告

    题目大意: 用一个数组代表群山的高度.高度大的地方代表山峰,小的地方代表山谷.山谷可以容水.假设有一天下了大雨,求群山中总共可以容纳多少水? 如图所示情况,a代表该数组,总共可以容纳5个水. 解题思路 ...

  8. timus 1180. Stone Game 解题报告

    1.题目: 1180. Stone Game Time limit: 1.0 secondMemory limit: 64 MB Two Nikifors play a funny game. The ...

  9. timus 1175. Strange Sequence 解题报告

    1.题目描述: 1175. Strange Sequence Time limit: 1.0 secondMemory limit: 2 MB You have been asked to disco ...

随机推荐

  1. <Linux> 文件夹右下角有锁,解锁

    sudo chown -R $USER 文件夹路径 例如:sudo chown -R $USER ~/scala

  2. github构建个人网站模板

    http://novoland.github.io/%E5%B9%B6%E5%8F%91/2014/09/11/ThreadLocal%20%E5%88%86%E6%9E%90.html

  3. 《算法》第一章部分程序 part 1

    ▶ 书中第一章部分程序,加上自己补充的代码,包括若干种二分搜索,寻找图上连通分量数的两种算法 ● 代码,二分搜索 package package01; import java.util.Arrays; ...

  4. eclipse中无法新建Android工程 出现问题:Plug-in org.eclipse.ajdt.ui was unable to load

    转自:http://www.bubuko.com/infodetail-757338.html eclipse中打开后新建Android项目区仍无法创建,出现下列提示对话框: Plug-in org. ...

  5. delphi 连接DBF

    delphi 连接DBF 使用 DBF 文件时,文件夹表示数据库,单个 DBF 文件表示表 1.BDE,已淘汰 table1.Databasename:=dbdir;//设置库路径table1.Tab ...

  6. python 阿狸的进阶之路(4)

    装饰器 #1.开放封闭原则:对扩展开放,对修改是封闭#2.装饰器:装饰它人的,器指的是任意可调用对象,现在的场景装饰器->函数,被装饰的对象也是->函数#原则:1.不修改被装饰对象的源代码 ...

  7. Delphi 使用MD5 比对文件

    使用MD5的方法比对CXimage里图片是否改变: Delphi7实现方法: uses IdHashMessageDigest function TForm1.GetImageMD5(cxImage: ...

  8. android 环境变量

    1.新建一个环境变量和系统变量名称为ANDROID_HOME,变量值为当前安装SDK的目录 2.把%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools添 ...

  9. html 自定义属性的获取和应用

    在html 中,我们可以给元素设置自定义属性,格式:  data-属性="属性值",可以设置一个,也可以设置多个 1.获取元素属性的常规方法:直接获取元素,然后使用getAttri ...

  10. java-部分精选面试题

    JVM的类加载机制是什么?有哪些实现方式? 类加载机制: 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法去内,然后在堆区创建一个java.lang.Clas ...