天地无极,乾坤剑法

导航

 

题目描述

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

输入

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

输出

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

 

posted on 2018-01-07 12:54  天地无极,乾坤剑法  阅读(255)  评论(0)    收藏  举报