JAVA面向对象解决实际问题实例(一)

某次战役中,为便于信息交互,我军侦察部门将此次战役的关键高地坐标设定为(x=0y=0)并规定,每向东增加100米,x1,每向北增加100米,y1。同时,我军情报部门也破译了敌军向坦克发送的指挥信号,其中有三种信号(L,R,M)用于控制坦克的运动,L R 分别表示使令坦克向左、向右转向,M 表示令坦克直线开进100米,其它信号如T用于时间同步,P用于位置较准。

一日,我军侦察兵发现了敌军的一辆坦克,侦察兵立即将坦克所在坐标(P, Q)及坦克前进方向(W:西,E:东,N:北,S:南)发送给指挥部,同时启动信号接收器,将坦克接收到的信号实时同步发往指挥部,指挥部根据这些信息得以实时掌控了该坦克的位置,并使用榴弹炮精准地击毁了该坦克。

假设,侦察兵发送给指挥部的信息如下:

坦克坐标:(1139

坦克运行方向:W

坦克接收到的信号为:MTMPRPMTMLMRPRMTPLMMTLMRRMP

请通过编程计算出坦克所在的位置(编程语言不限)

 

Java的实现代码如下:

 1 package bst;
 2 
 3 public class Bst {
 4     //坦克初始坐标
 5     ZB zb = new ZB(11,39);
 6     //坦克初始运行方向
 7     String direction = "W";
 8     
 9     //根据接收到的信号编程计算出坦克最终的坐标
10     public ZB getZB(String news){
11         
12         String[] str = news.split("");
13         
14         for(int i = 0;i<str.length;i++){
15             if("L".equals(str[i])){
16                 switch (direction) {
17                 case "W":direction="S";break;
18                 case "E":direction="N";break;
19                 case "N":direction="W";break;
20                 case "S":direction="E";break;
21                 default:break;
22                 }
23             }else if("R".equals(str[i])){
24                 switch (direction) {
25                 case "W":direction="N";break;
26                 case "E":direction="S";break;
27                 case "N":direction="E";break;
28                 case "S":direction="W";break;
29                 default:break;
30                 }
31             }else if("M".equals(str[i])){
32                 switch (direction) {
33                 case "W":zb.setX(zb.getX()-1);break;
34                 case "E":zb.setX(zb.getX()+1);break;
35                 case "N":zb.setY(zb.getY()+1);break;
36                 case "S":zb.setY(zb.getY()-1);break;
37                 default:break;
38                 }
39             }
40         }
41         
42         return zb;
43         
44     }
45     
46     //打印出坦克的最终坐标
47     public static void main(String[] args) {
48         Bst bst = new Bst();
49         ZB zb = bst.getZB("MTMPRPMTMLMRPRMTPLMMTLMRRMP");
50         System.out.println("坦克所在的位置为:"+zb.toString());
51     }
52 
53 }
54 
55 //坦克坐标类
56 class ZB{
57     int x;
58     int y;
59     
60     public ZB(int x, int y) {
61         super();
62         this.x = x;
63         this.y = y;
64     }
65 
66     public int getX() {
67         return x;
68     }
69     
70     public void setX(int x) {
71         this.x = x;
72     }
73     
74     public int getY() {
75         return y;
76     }
77     
78     public void setY(int y) {
79         this.y = y;
80     }
81     
82     //重写toString方法
83     public String toString(){
84         return "("+x+","+y+")";
85     }
86 }

转载于:https://www.cnblogs.com/zhncnblogs/p/8961640.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值