首页 > 其他分享 >11月13日

11月13日

时间:2024-11-13 10:10:08浏览次数:1  
标签:11 distance 13 String AbstractNode direction action public

某机器人控制程序包含一些简单的英文指令,其文法规则如下:

expression ::= direction action distance | composite

composite ::= expression and expression

direction ::= ‘up’ | ‘down’ | ‘left’ | ‘right’

action ::= ‘move’ | ‘run’

distance ::= an integer //一个整数值

如输入:up move 5,则输出“向上移动5个单位”;输入:down run 10 and left move 20,则输出“向下移动10个单位再向左移动20个单位”。

实验要求:

1. 提交类图;

2. 提交源代码;

3. 注意编程规范。

 

 

 

 

  1. AbstractNode .java

package org.example;

 

import java.util.Stack;

 

abstract class AbstractNode {
public abstract String interpret();

}

  1. ActionNode r.java

package org.example;

 

public class ActionNode extends AbstractNode{

private String action;

 

public ActionNode(String action) {

super();

this.action = action;

}

 

@Override

public String interpret() {

// TODO Auto-generated method stub

if(action.equals("move")){

return "移动";

}else if(action.equals("run")){

return "快速移动";

}else{

return "error";

}

 

}

}

  1. AndNode .java

package org.example;

 

public class AndNode extends AbstractNode {

private AbstractNode left;

private AbstractNode right;

@Override

public String interpret() {

// TODO Auto-generated method stub

return left.interpret() + "再" +right.interpret();

}

public AndNode(AbstractNode left, AbstractNode right) {

super();

this.left = left;

this.right = right;

}

}

 

  1. DirectionNode .java

package org.example;

 

public class DirectionNode extends AbstractNode{
private String direction;

public DirectionNode(String direction) {
super();
this.direction = direction;
}
@Override
public String interpret() {
// TODO Auto-generated method stub
if(direction.equals("up")){
return "向上";
}else if(direction.equals("down")){
return "向下";
}else if(direction.equals("left")){
return "向左";
}else if(direction.equals("right")){
return "向右";
}else{
return "error";
}
}
}

  1. DistanceNode .java

package org.example;

 

public class DistanceNode extends AbstractNode{
private String distance;

public DistanceNode(String dis) {
super();
this.distance = dis;
}

@Override
public String interpret() {
// TODO Auto-generated method stub
return this.distance;
}

}

 

  1. InstructionHandler .java

package org.example;

 

import java.util.Stack;

public class InstructionHandler {
private AbstractNode node;
public void handle(String instruction){
AbstractNode left = null;
AbstractNode right = null;
AbstractNode direction = null;
AbstractNode action = null;
AbstractNode distance = null;
Stack<AbstractNode> stack = new Stack<>();
String [] words = instruction.split(" ");
for (int i = 0; i < words.length; i++) {
if(words[i].equalsIgnoreCase("and")){
left = (AbstractNode)stack.pop();
String dir = words[++i];
direction = new DirectionNode(dir);
String a = words[++i];
action = new ActionNode(a);
String dis = words[++i];
distance = new DistanceNode(dis);
right = new SentenceNode(direction, action, distance);
stack.push(new AndNode(left, right));
}else{
String dir = words[i];
direction = new DirectionNode(dir);
String a = words[++i];
action = new ActionNode(a);
String dis = words[++i];
distance = new DistanceNode(dis);
left = new SentenceNode(direction, action, distance);
stack.push(left);

}
}
this.node = (AbstractNode)stack.pop();
}
public String output(){
String result = node.interpret();
return result;
}

}

 

  1. SentenceNode .java

package org.example;

 

public class SentenceNode extends AbstractNode{
private AbstractNode direction;
private AbstractNode action;
private AbstractNode distance;
public SentenceNode(AbstractNode direction, AbstractNode action, AbstractNode distance) {
super();
this.direction = direction;
this.action = action;
this.distance = distance;
}
@Override
public String interpret() {
// TODO Auto-generated method stub
return direction.interpret()+action.interpret()+distance.interpret();
}

}

 

标签:11,distance,13,String,AbstractNode,direction,action,public
From: https://www.cnblogs.com/gyg1222/p/18543269

相关文章

  • 【2024-11-12】二宝着凉
    20:00你拼尽全力,但胜利并不总是属于你。不过,如果你始终坚持下去,你会等到属于你的机会。                                                 ——郑钦文二宝昨晚深夜小咳......
  • 适用于 Windows 11/10/8/7/Vista/XP 的最佳免费分区软件
    无论您使用的是SSD、机械磁盘还是任何类型的RAID阵列,硬盘驱动器都是Windows计算机中不可或缺的组件。在将文件保存到全新磁盘之前,您应该初始化它,创建分区并使用文件系统格式化。在运行计算机一段时间后,您需要收缩、扩展、转换、复制磁盘分区等。可靠的磁盘分区工具可以帮......
  • 13.观察者模式设计思想
    13.观察者模式设计思想目录介绍01.观察者模式基础1.1观察者模式由来1.2观察者模式定义1.3观察者模式场景1.4观察者模式思考02.观察者模式实现2.1罗列一个场景2.2用例子理解观察者2.3案例演变分析2.4观察者模式基本实现03.观察者模式分析3.1观察者模......
  • Introspect M5513-DDR5 MR-DIMM Module Test System
    M5513DDR5MR-DIMMModuleTestSystemComplete ChaaracterizationandFuncationalTestingofMR-DIMMModulesTheM5513isanall-inclusivememorytestsystemfornext-generationDDR5multiplexed-rankdualinline memorymodules(MR-DIMM).Operating......
  • Ubuntu 22.04 LTS 离线安装 Harbor v2.11 (附https认证,Trivy镜像扫描)
    Harbor介绍Harbor是一个开源的企业级DockerRegistry服务,它提供了一个安全、可信赖的仓库来存储和管理Docker镜像。Harbor翻译为中文名称为"庇护;居住;"。可以理解为是Docker镜像的"居住环境"或者是镜像的"庇护所"。Harbor最初由VMware公司开发,旨在解决企业级Docker镜像管理的......
  • 11.17
    [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:画出对应的类图;提交源代码;packageadapter;//Cat接口interfaceCat{voidcry();voidcatchMouse();}//Dog接口interfaceDog{voidwang();voida......
  • Alpha冲刺(1/14)——2024.11.12
    目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录项目运行截图五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表七、UML设计子用例及改进每日实现UML设计子用例时序图、状态图、......
  • 2024.11.12总结报告(一本“英语八年级上册”TEST4 A完形填空 难度:2)
    今日份错误:基本介绍:本题为完形填空选择题,一共10题,错误2题基本考点:本题考查重点为翻译和理解,难点为语法和词汇错误题目:(7)(10)分析:(7)本小题的错误原因为语法,理解中出现错误,具体为动词的过去式与过去分词并未熟练掌握,上下文的联系不够紧密,对文章的理解能力出现问题,思路出现错误不......
  • 2024.11.12
    主要问题:SecurityHandler在handlerOnAuthenticationSuccess方法中调用了userService.userLoginStatus,这会导致UserService需要依赖SecurityHandler。这种双向依赖形成了一个循环依赖,Spring容器无法正确处理这个循环,导致应用启动失败。解决思路:1.避免循环依赖:通过重构......
  • .NET周刊【11月第2期 2024-11-10】
    国内文章.NET全能高效的CMS内容管理系统https://www.cnblogs.com/1312mn/p/18511224SSCMS是一个完全开源的企业级内容管理系统,基于.NETCore开发,适合跨平台部署。其特点包括支持多终端发布和功能插件,具有完善的权限控制和安全机制,可通过标签和API接口进行二次开发。SSC......