题解 | #坐标移动#
坐标移动
http://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
方法比较简单直接:
- 用一个字符串接收输入
- 用";"拆分字符串,分成每一组移动操作
- 遍历每组操作:
- 先判断每组操作是否合法(定义一个合法函数legal)
- 如果合法,则采用switch语句,根据对应操作对坐标进行加减
legal合法函数,判断条件:
- 空串,操作位大于3位,或者小于2位,不合法;
- 第一个字符是除A,D,W,S以外的字母,不合法
- 除第一个字符以外,后面两位数如果不是数字(用了正则表达式),不合法
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine();
move(str);
}
}
public static void move(String str){
int x = 0;
int y = 0;
//拆分操作
String[] opts = str.split(";");
for(String opt : opts){
//判断是否合法的坐标
if(!legal(opt)) continue;
switch(opt.charAt(0)){
case 'A':
//左移
x -= Integer.parseInt(opt.substring(1));
break;
case 'D':
//右移
x += Integer.parseInt(opt.substring(1));
break;
case 'W':
//上移
y += Integer.parseInt(opt.substring(1));
break;
case 'S':
//下移
y -= Integer.parseInt(opt.substring(1));
break;
}
}
System.out.println(x + "," + y);
}
public static boolean legal(String opt){
//空串,长度小于或大于3(字母+两位数字=3位)
if(opt==null || opt.equals("") || opt.length()>3 || opt.length()<2) return false;
//包含其他字符
if(!(opt.charAt(0)=='A' || opt.charAt(0)=='D' || opt.charAt(0)=='W' || opt.charAt(0)=='S')){
return false;
}
String num = opt.substring(1);
String reg="^\\d+$";
if(!num.matches(reg)) return false;
return true;
}
}