1. 程式人生 > >華為線上程式設計題系列-17- 座標移動

華為線上程式設計題系列-17- 座標移動

問題描述:
問題描述
問題描述

1. 問題涉及知識點.

  • 字串處理.

2. 自己解法.

  • 按照行拿到字串,對字串使用string.split(";")進行分割.對每個單元進行合理性分析.
  • 若合理按照題目要求,執行.
package com.chaoxiong.niuke.huawei;
import java.util.Objects;
import java.util.Scanner;
public class HuaWei_17 {
    private static final String Split = ";";
    public static void main(String[] args) {
        String string = null
; Scanner in = new Scanner(System.in); while (in.hasNext()) { string = in.nextLine(); int []pointArr = {0,0}; String[] strArray = string.split(Split); for (String each:strArray){ int []flag = isLegel(each);//[(1表示合法 -1表示不合法),(其他表示移動的多少 -1表示不合法)]
if(flag[0]==1&&flag[1]!=-1){ //輸入合法 char []charArr = each.toCharArray(); char dir = charArr[0]; int step = flag[1]; nextPoint(pointArr,dir,step); } } System.out.println(pointArr[0
]+","+pointArr[1]); } } private static void nextPoint(int[] pointArr, char dir, int step) { switch (dir){ case 'A'://向左 pointArr[0] = pointArr[0]-step; break; case 'D'://向左 pointArr[0] = pointArr[0]+step; break; case 'W'://向左 pointArr[1] = pointArr[1]+step; break; case 'S'://向左 pointArr[1] = pointArr[1]-step; break; } // System.out.println(pointArr[0]+" "+pointArr[1]); } private static int[] isLegel(String each) { // AA10; A1A; $%$; YAD; 則為不合法. //1. 第一位必須是 A,D,W,S中的一個 //2. 之後的必須是數字. int []falg = {-1,-1}; if(Objects.equals(each.trim(), "") || each.length() < 2){ //不合法 falg[0]=-1; }else { char[] charArr = each.toCharArray(); //判斷第一位 if(inCharSet(charArr[0])){ falg[0]=0; falg[1]=canConvetInt(new String(charArr, 1, charArr.length - 1)); }else { //不合法 falg[0]=-1; } } return falg; } private static int canConvetInt(String s) { // 可以裝換成整數返回true 不行返回false. int result = -1; try { result = Integer.parseInt(s); return result; }catch (Exception e){ return result; } } private static boolean inCharSet(char c) { return c == 'A' || c == 'D' || c == 'W' || c == 'S'; } }

3. 優質答案.

import java.util.*;
public class Main{
    public static void main(String[]args){
        Scanner scan=new Scanner(System.in);
        while(scan.hasNextLine()){
            int x=0;
            int y=0;
            String[]tokens=scan.nextLine().split(";");
            for(int i=0;i<tokens.length;i++){
                try{
                    int b=Integer.parseInt(tokens[i].substring(1,tokens[i].length()));
                    if(tokens[i].charAt(0)=='A'){
                        x-=b;
                    }
                     if(tokens[i].charAt(0)=='W'){
                        y+=b;
                    }
                     if(tokens[i].charAt(0)=='S'){
                        y-=b;
                    }
                     if(tokens[i].charAt(0)=='D'){
                        x+=b;
                    }
                }catch(Exception e){
                    continue;
                }
            }
            System.out.println(x+","+y);

        }
    }
}

4. 本題總結.

相比之下優秀解法中的解法方式就簡便了很多.
因為只有四個反向,所有就只出現四中情況判斷即可.
直接全部房子啊異常中,不符合條件可能引起異常的就直接忽略.