题解 | #坐标移动#

坐标移动

https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29

import java.util.Scanner;
//本题我的解题思路是,根据题意知,有两种是有效输入,以x代表字母AWSD,y代表数字,
//开头的“xyy;”与“xy;”是一种,还有一种在中间和结尾的形式如“;xyy;”和“;xy;”是另一种有效输入
//对这两种形式进行特别处理,其他的直接省略即可
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        //代表X和Y坐标
        int[] XY ={0,0};
        //go代表坐标改变的数额
        int go = 0;
        int i = 0;
	    //先对开头的符合条件的进行处理,不符合就跳过
        if(fun1(str.charAt(i))){
            if(fun2(str.charAt(i+1))){
                if(fun2(str.charAt(i+2))){
                   if(str.charAt(i+3)==';'){
                       go = (str.charAt(i+1)-48)*10 + (str.charAt(i+2)-48);
                       XY = funmove(str.charAt(i),go,XY);
                   }
                }
                else if(str.charAt(i+2)==';') {
                    go = str.charAt(i + 1) - 48;
                    XY = funmove(str.charAt(i), go, XY);
                }
            }
        }
	    //对不是开头的符合条件的进行处理,不符合条件的跳过
        for (i = 1; i <= str.length() - 3; i++) {
            if(fun1(str.charAt(i))){
                if(fun2(str.charAt(i+1))){
                    if(fun2(str.charAt(i+2))&& i+3 < str.length()){
                        if(str.charAt(i+3)==';'&&str.charAt(i-1)==';'){
                            go = (str.charAt(i+1)-48)*10 + (str.charAt(i+2)-48);
                            XY = funmove(str.charAt(i),go,XY);
                        }
                    }
                    else if(str.charAt(i+2)==';'&&str.charAt(i-1)==';') {
                        go = str.charAt(i + 1) - 48;
                        XY = funmove(str.charAt(i), go, XY);
                    }
                }
            }
            }
        System.out.print(XY[0]);
        System.out.print(",");
        System.out.print(XY[1]);
        }
    //判断是否为AWSD中的一个
    public static boolean fun1(char ch) {
        if (ch == 'A' || ch == 'W' || ch == 'S' || ch == 'D')return true;
        else return false;
    }
    //判断是否为数字
    public static boolean fun2(char ch1) {
        if (ch1 >= 48 && ch1 <= 57 )return true;
        else return false;
    }
    //对符合条件的进行特殊处理,并把得到的改变值返回
    public static int[] funmove(char ch1,int go,int[] a){
        switch (ch1) {
            case 'A': {
                a[0] -= go;
                break;
            }
            case 'W': {
                a[1] += go;
                break;
            }
            case 'D': {
                a[0] += go;
                break;
            }
            case 'S': {
                a[1] -= go;
                break;
            }
        }
        return a;
    }

}

全部评论

相关推荐

请看图片
投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
11-08 16:53
门头沟学院 C++
投票
滑模小马达:第三个如果是qfqc感觉还行,我签的qfkj搞电机的,违约金也很高,但公司感觉还可以,听说之前开过一个试用转正的应届生,仅供参考。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务