某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單,只有3種:左轉(記為L),右轉(記為R),向前走若干厘米(直接記數字)。
例如,我們可以對小車輸入如下的指令:15L10R5LRR10R20 則,小車先直行15厘米,左轉,再走10厘米,再右轉,…
不難看出,對于此指令串,小車又回到了出發地。
你的任務是:編寫程序,由用戶輸入指令,程序輸出每條指令執行后小車位置與指令執行前小車位置的直線距離。
輸入、輸出格式要求
用戶先輸入一個整數n(n<100),表示接下來將有n條指令。接下來輸入n條指令。每條指令只由L、R和數字組成(數字是0~100之間的整數),每條指令的長度不超過256個字符。
程序則輸出n行結果。每條結果表示小車執行相應的指令前后位置的直線距離。要求四舍五入到小數后2位。 例如:用戶輸入:
5
L100R50R10
3LLL5RR4L12
LL
100R
5L5L5L5
則程序輸出:
102.96
9.06
0.00
100.00
0.00
import java.util.ArrayList; import java.util.Scanner;public class 機器人行走 {/*** @param args*///初始朝向static int fang=1;//初始坐標static int x=0,y=0;//定義方向static int[][]ss={{0,1},{1,0},{0,-1},{-1,0}};public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner=new Scanner(System.in);int n=scanner.nextInt();String[]list=new String[n];for (int i = 0; i <n; i++)list[i]=scanner.next();for (String string : list){Get(string);x=0;y=0;}}public static void Get(String str){ArrayList<String>list=new ArrayList<String>();//將字符與數字分開String temp1="";//零時存儲數字String temp2="";//零時存儲字符for (int i = 0; i < str.length(); i++){//如果當前獲取的字符屬于數字,則并入 temp1if(str.charAt(i)>='0'&&str.charAt(i)<='9'){temp1+=str.charAt(i)+"";if(i==str.length()-1)list.add(temp1);}//如果當前獲取的字符不屬于數字else{//判斷存儲數字的 temp1 是否屬于空if(temp1!=""){list.add(temp1);temp1="";}temp2=str.charAt(i)+"";list.add(temp2);}}//遍歷區分開來的隊列for (String s : list) {//如果不是方向鍵 則按照當前方向前進if(!s.equals("R")&&!s.equals("L")){int t=Integer.parseInt(s);run(t);}else{//如果是方向鍵則進行轉向 turn(s);}}//利用直角三角形的定理 算出長邊的長度double sum=Math.sqrt(Math.pow(x,2)+Math.pow(y,2));System.out.printf("%.2f",sum);System.out.println();}//n 前進的距離static void run(int n){x+=ss[fang][0]*n;y+=ss[fang][1]*n;}//轉彎static void turn(String st){//如果是右方(順時針)則加一并取模4的值if(st.equals("R")){fang=(fang+1)%4;}//如果是左方(順時針)則加3并取模4的值else{fang=(fang+3)%4;}}}
原文鏈接:https://blog.csdn.net/qq_39020387/article/details/79739814