开发一个坐标计算工具, 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)
输入描述:
一行字符串
输出描述:
最终坐标,以,分隔
输入例子:A10;S20;W10;D30;X;A1A;B10A11;;A10;
输出例子:10,-10import java.util.Scanner;
public class Main {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws Exception {
while (scanner.hasNext()) {
String s = scanner.nextLine();
String[] strs = s.split(";");
place now = new place(0, 0);
for (int i = 0; i < strs.length; i++) {
if (judgeStr(strs[i])) {
char ch = strs[i].charAt(0);
int a = Integer.parseInt(strs[i].substring(1));
if (ch == 'A') {
now.x -= a;
} else if (ch == 'D') {
now.x += a;
} else if (ch == 'W') {
now.y += a;
} else if (ch == 'S') {
now.y -= a;
}
}
}
System.out.println(now.x + "," + now.y);
}
}
private static boolean judgeStr(String str) {
if(str.length()<2||str.length()>3){
return false;
}
String num = str.substring(1);
if (isNum(num)) {
char c = str.charAt(0);
if (c == 'A' || c == 'D' || c == 'W' || c == 'S') {
return true;
}
}
return false;
}
private static boolean isNum(String num) {
try {
Integer a = Integer.parseInt(num);
} catch (Exception e) {
return false;
}
return true;
}
static class place {//定义位置对象(含,x,y)
int x;
int y;
public place(int x, int y) {
this.x = x;
this.y = y;
}
}
}
解法一:百度到的比较常规的思路import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
String str=sc.nextLine();
String[] strx=str.split(";");
Point start=new Point();//新建一个坐标点(0,0)
for(int i=0;i
if(strx[i].length()<=3&&strx[i].length()>1){
if (strx[i].charAt(0) == 'A'
|| strx[i].charAt(0) == 'W'
|| strx[i].charAt(0) == 'S'
|| strx[i].charAt(0) == 'D') {
String num=strx[i].substring(1);
int len=num.length();
if(len-num.replaceAll("[^0-9]","").length()==0){
start=Direction(strx[i],start);
}
}
}
}
System.out.println(start.x+","+start.y);
}
}
public static Point Direction(String str,Point start){
if(str.charAt(0)=='A'){
start.x=start.x-Integer.parseInt(str.substring(1));
}
if(str.charAt(0)=='W'){
start.y=start.y+Integer.parseInt(str.substring(1));
}
if(str.charAt(0)=='S'){
start.y=start.y-Integer.parseInt(str.substring(1));
}
if(str.charAt(0)=='D'){
start.x=start.x+Integer.parseInt(str.substring(1));
}
return start;
}
}
class Point{ //x,y是int类型,默认为0,不需要赋值
int x;
int y;
}
解法二:一个大佬做的
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
try{
int b=Integer.parseInt(tokens[i].substring(1,tokens[i].length()));
//强制转化String为int ,如果报错,直接try-catch到,那么进行下一个!牛!!
/*
接下进行判断首字母
*/
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);
}
}
}