*****题目: 在机器人足球比赛中,server和球员client之间通过发送字符串来进行信息交互,其中server要把某球员的听觉和视觉信息发送给该球员,信息的格式如下所示:
(hear Time Sender Message)
(see Time ObjInfo ObjInfo …)
要求:编写程序解析球员所看到和听到的信息。
示**例:
(hear 1022 -30 passto(23,24))(see 1022 ((ball) 20 -20 1 -2) ((player hfut1
2) 23 45 0.5 1 22 40 ) ((goal r) 12 20))
输出:*
在1022周期 hear 从 -30 方向 听到了 passto(23,24);
在1022周期 see Ball 距离我的 Distance 是 20, Direction是 -20,DistChng是1,DirChng是-2;player hfut 2距离我的Distance 是 23, Direction是 45,DistChng是0.5,DirChng是1,它的BodyDir是 22和HeadDir是 44;goal r 距离我的Distance 是 12, Direction是 20。
由于技术有限,我才用了粗暴地解决方法,即想办法将所有数据都放入一个数组中,在逐一处理;
首先要处理传来的信息,由于所给的信息(hear Time Sender Message)(see Time ObjInfo ObjInfo …)中包含了括号和空格,所以我们要想办法去掉,我的方法是将括号全部替换成逗号,再将所有的逗号和空格,再用用split函数将根据逗号和括号进行切片
Scanner in = new Scanner(System.in);
String str=in.nextLine();
String strafter2=str.replaceAll("\\(|\\)", "\\,");
String[] strafter=strafter2.split("\\s+|\\,");
如果 主函数中 strafter[y].equals(“see”) 说明接下来要处理的是see的信息
接下来strafter[y+1]就是周期,做法就是打印周期,
在接下来,strafer[y+2]就是各种物体的信息,对于不同的物体,由于Distance , Direction ,DistChng,DirChng是不一样的,所以分别处理,比如,对球来说,它的信息中包含了Distance , Direction ,DistChng,DirChng,所以:
public void ball(String []strafter,int i){
i=i+2; //表示 strafer[i+2]
System.out.print(strafter[i]);
double []data = new double[4];
for(int y=0;y<4;i++,y++)
{
data[y]=Double.parseDouble(strafter[i]); //将字符串化成浮点数
}
Distance=data[0];
Direction=data[1];
DistChng = data[2];
DirCng =data[3];
System.out.println( " Ball 距离我的 Distance 是 "+Distance+" Direction是"+Direction+" DistChng是"+DirChng+" DirChng是"+DirChng);
}
对每种物体都进行处理
后,即可粗暴地读取数据并展示
import java.awt.Robot;
import java.io.ObjectInputStream.GetField;
import java.io.PrintWriter;
import java.util.Scanner;
import javax.swing.text.StyledEditorKit.ForegroundAction;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
import javax.xml.stream.StreamFilter;
import
javax.xml.transform.sax.SAXTransformerFactory;
public class robot {
double Distance, Direction, DistChng, DirChng,BodyDir, HeadDir;
public void see(String[]strafter,int i ){
String time = strafter[i+1];
System.out.print("在"+time+"周期"+" see ");
}
public void ball(String []strafter,int i){
i=i+2;
System.out.print(strafter[i]);
double []data = new double[4];
for(int y=0;y<4;i++,y++)
{
data[y]=Double.parseDouble(strafter[i]);
}
Distance=data[0];
Direction=data[1];
DistChng = data[2];
DirChng =data[3];
System.out.println( " Ball 距离我的 Distance 是 "+Distance+" Direction是"+Direction+" DistChng是"+DirChng+" DirChng是"+DirChng);
}
public void Player(String []strafter,int i ){
String []playerName =new String[2];
int x;
x=i+4;
double []data = new double[6];
for(int y=0;y<6;x++,y++)
{
data[y]=Double.parseDouble(strafter[x]);
}
Distance=data[0];
Direction=data[1];
DistChng = data[2];
DirChng =data[3];
BodyDir = data[4];
HeadDir =data[5];
System.out.println( strafter[i+1]+" "+strafter[i+2]+" 距离我的 Distance 是 "+Distance+" Direction是"+Direction+" DistChng是"+ DistChng+" DirChng是"+DirChng);
}
public void goal(String []strafter,int i){
int x=i+3;
double []data = new double[2];
for(int y=0;y<2;x++,y++)
{
data[y]=Double.parseDouble(strafter[x]);
}
Distance=data[0];
Direction=data[1];
System.out.print( "goal "+strafter[i+1]+ " 距离我的 Distance 是 "+Distance+" Direction是"+Direction);
}
public void hear(String[]strafter){
int i=0;
int x;
for(;i<strafter.length;i++)
{
if(strafter[i].equals("hear"))
break;
}
x=i+1;
String time = strafter[x];
System.out.print("在"+time+"周期"+" hear ");
}
public void sender(String[]strafter,int x){
int i=0;
for(;i<strafter.length;i++)
{
if(strafter[i].equals("passto"))
break;
}
System.out.print("从"+strafter[x+2]+"方向听到了"+"passto("+strafter[i+1]+","+strafter[i+2]+")");
}
public static void main(String[] args) {
robot Robot = new robot();
Scanner in = new Scanner(System.in);
String str=in.nextLine();
String strafter2=str.replaceAll("\\(|\\)", "\\,");
String[] strafter=strafter2.split("\\s+|\\,");
for(int y=0;y<strafter.length;y++)
{
if(strafter[y].equals("hear")){
Robot.hear(strafter);
Robot.sender(strafter,y);
System.out.println("");
}
else if(strafter[y].equals("see")){
Robot.see(strafter,y);}
else if(strafter[y].equals("ball")){
Robot.ball(strafter,y);}
else if(strafter[y].equals("player")){
Robot.Player(strafter,y);}
else if(strafter[y].equals("goal")){
Robot.goal(strafter,y);}
}
}
}
}