输入描述:

一行字符串

输出描述:

最终坐标,以逗号分隔
 
 

描述:

开发一个坐标计算工具, 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\le n \le 10000 \1≤n≤10000  ,坐标保证满足 , 且数字部分仅含正数
 
 
思路:
(暴力)
1.先对输入进行判断,要求满足条件。
2.设置一个循环,取得两个;;之间的字符串。若是正确格式,进入ifcase语句,ifcase语句对坐标进行操作。若不是则继续下一个;直至执行完整个字符串
3.输出最终结果
 
结论:可以的。但代码写不出来,太生疏了。
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;




public class Main{
   public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String input;//用于接收输入信息
        String[] strs;//存放动作
        int x=0,y=0;//坐标


       while((input = reader.readLine()) != null){//输入未空
           strs = input.split(";");//获得动作
           for(String str : strs){//对每个动作做如下操作
               int v = 0;//操作距离
               if("".equals(str)||str.length()>3) continue;//判断是否是正确格式
               for(int i = 1;i<str.length();i++){//如动作是W12,两次取得的是”1“、“2”
                   int t = str.charAt(i) - '0';//看各个位数为多少,转10进制
                   if(t>=0&&t<=9){
                       if(i ==1 &&str.length()!=2){
                           v = v+t*10;//十位,要*10
                       }else{
                           v = v+t;//个位
                       }
                   }else{
                       v = 0;
                       break;


                   }
               }
               char c = str.charAt(0);//动作的方向
               switch(c){
                   case 'A':
                       x = x - v;
                       break;
                   case 'D':
                       x = x + v;
                       break;
                   case 'W':
                       y = y + v;
                       break;
                   case 'S':
                       y = y - v;
                       break;
               }
           }
           System.out.println(x + "," + y);//输出最后坐标
       }  
    }
}

 

 
谷歌技术点:
 
1.BufferedReader使用
 
BufferedReader buf = null;//声明BufferedReader对象
buf = new BufferedReader(new InputStreamReader(System.in));
//初始化并使用system.in输入赋值
String str = null;//用于接收输入
System.out.println("请输入内容:");
try{
    str = buf.readLine();//读取一行数据
}catch{
    e.printStackTrace();//输出信息
}
    System.out.println("输入内容为:"+str)
}

 

 
2.分割字符串,获得坐标动作数组
 
String.spilt("*",^);
其中*是分隔符,通常为“,”或“;”
^是按分隔符截取多少个,为整型数字
 
 
注意:
1.转义字符需要在分隔符前加\\,如
如果使用“.”作为分隔符必须写成下面的写法:
String.split("\\.");
2.多个分隔符,可以使用“|”为连字符
 
//另外,如果分隔符是转义字符需要使用“\\”
String.split(A|B);

3.java的try catch语句

1. try {
2. 逻辑代码块1;
3. } catch(ExceptionType e) {
4. 处理代码块1;
5. }
 
4.java的for语句
 
String[] strs;
String str;
for(String str:strs){

}

 

 
 
posted on 2022-07-31 18:07  Jolyne123  阅读(169)  评论(0编辑  收藏  举报