题解 | #坐标移动#

坐标移动

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

import java.util.Scanner; public class Hj17 { /*  开发一个坐标计算工具, 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  */  public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);    String str = scan.nextLine();    String[] s = str.split(";");    /*for(int i=0;i<s.length;i++){  System.out.println(s[i]);  }  */  //对非法数据进行处理    for(int i=0;i<s.length;i++){  byte[] bytes = s[i].getBytes();//还得对空串特殊处理    if(bytes.length==0){  continue;    }  if(bytes[0]!=65&&bytes[0]!=68&&bytes[0]!=83&&bytes[0]!=87){//字符串转成byte数组的时候会字母会根据ACSII码来转值,65为A,68为D,83为S,87为W;
                s[i] = "";    }else{  for(int j=1;j<bytes.length;j++){ if(bytes[j]<48||bytes[j]>57){//48和57是0和9的ACSII码
                            s[i] = "";    }
                }
            }
        } /*for (String s1:s  ) {  System.out.println(s1);  }   */
   //坐标移动,准备xy,对s数组里面的剩余字符串进行截取,截取的两个串为字母和数字,字母串决定加减,数字串决定数据    int x = 0;  int y = 0;  for(int i=0;i<s.length;i++){  if(s[i].equals("")){  continue; }else{
                    String str1 = s[i].substring(0,1);    String str2 = s[i].substring(1,s[i].length());  int number = Integer.parseInt(str2);  if(str1.equals("A")){
                        x-=number;    } else if (str1.equals("D")) {
                        x+=number;    } else if (str1.equals("W")) {
                        y+=number;    } else {
                        y-=number;    }
            }  if(i==s.length-1){
                System.out.println(x+","+y);    }

        }
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务