A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 许智敏 于 2013-5-19 14:27 编辑
  1. /*
  2. * 请帮忙修改一下~谢谢~
  3. *
  4. *
  5. * 机器人行走。
  6. * 某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。
  7. * 小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字)。
  8.     例如,我们可以对小车输入如下的指令
  9.     15L10R5LRR10R20
  10.     则,小车先直行15厘米,左转,再走10厘米,再右转,...
  11.     不难看出,对于此指令串,小车又回到了出发地。
  12.     你的任务是:编写程序,由用户输入指令,程序输出每条指令执行后小车位置与指令执行前小车位置的直线距离。
  13. 【输入、输出格式要求】
  14.     用户先输入一个整数n(n<100),表示接下来将有n条指令。
  15.     接下来输入n条指令。每条指令只由L、R和数字组成(数字是0~100之间的整数)
  16.     每条指令的长度不超过256个字符。
  17.     程序则输出n行结果。
  18.     每条结果表示小车执行相应的指令前后位置的直线距离。要求四舍五入到小数后2位。
  19.     例如:用户输入:
  20. 5
  21. L100R50R10
  22. 3LLL5RR4L12
  23. LL
  24. 100R
  25. 5L5L5L5
  26.     则程序输出:
  27. 102.96
  28. 9.06
  29. 0.00
  30. 100.00
  31. 0.00
  32. */
  33. package part2;
  34. import java.text.DecimalFormat;
  35. import java.util.ArrayList;
  36. import java.util.Scanner;

  37. public class Test14 {
  38.         public static void main(String[] args){
  39.                 Scanner scan = new Scanner(System.in);
  40.                 System.out.println("输入要输入的指令数:");
  41.                 int n = scan.nextInt();
  42.                 scan.nextLine();
  43.                 String[] ss = new String[n];
  44.                 System.out.println("请输入要输入的"+n+"条指令:");
  45.                 for(int i=0;i<n;i++)
  46.                         ss[i] = scan.nextLine();
  47.                 for(int i=0;i<n;i++){
  48.                         int x,y;//定义x,y,记录机器人的坐标,
  49.                         x=y=0;
  50.                         double dis = 0.0;//最终机器人到原点的距离
  51.                         ArrayList<Character> al = new ArrayList<Character>();
  52.                         al.add('S');//用集合模拟东西南北,二维坐标系。
  53.                         al.add('W');
  54.                         al.add('N');
  55.                         al.add('E');
  56.                         for(int j=0;j<ss[i].length();j++){//L100R50R10
  57.                                 if(ss[i].charAt(j)=='L'){//向左转,
  58.                                         al.add(al.remove(0));
  59.                                         continue;
  60.                                 }
  61.                                 if(ss[i].charAt(j)=='R'){//向右转
  62.                                         al.add(0,al.remove(3));
  63.                                         continue;
  64.                                 }
  65.                                 int a = 0;
  66.                                 String s = "";
  67.                                 System.out.println(s);
  68.                                 while(ss[i].charAt(j+a)>='0'&&ss[i].charAt(j+a)<='9'&&j+a<ss[i].length()){//取出数字部分。
  69.                                         s+=ss[i].charAt(j+a);
  70.                                         a++;
  71.                                 }
  72.                                 j = j+a-1;//改变增量j
  73.                                 int b = Integer.parseInt(s);//把本次走的路程变成int型
  74.                                 if((char)al.get(0)=='S')//横纵坐标的加减
  75.                                         y += b;
  76.                                 else if((char)al.get(0)=='W')
  77.                                         x -= b;
  78.                                 else if((char)al.get(0)=='N')
  79.                                         y -= b;
  80.                                 else if((char)al.get(0)=='E')
  81.                                         x += b;
  82.                         }
  83.                         DecimalFormat formater = new DecimalFormat("#0.##");
  84.                         dis = Math.sqrt(Math.pow(Math.abs(x),2)+Math.pow(Math.abs(y),2));
  85.                         dis = Double.parseDouble(formater.format(dis));
  86.                         System.out.println(dis);
  87.                 }
  88.         }
  89. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

2 个回复

倒序浏览
其实就是那个你要先判断是否越界j+a<ss[i].length()。可以这么写 while(j+a<ss[i].length() && ss[i].charAt(j+a)>='0'&&ss[i].charAt(j+a)<='9'){}
回复 使用道具 举报
何俊森 发表于 2013-5-19 12:06
其实就是那个你要先判断是否越界j+a

对的对的~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马