首页 > 其他分享 >10.7

10.7

时间:2025-01-02 15:30:19浏览次数:1  
标签:distance direction String 10.7 void action public

软件设计                  石家庄铁道大学信息学院

 

实验17:解释器模式(选作)

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解解释器模式的动机,掌握该模式的结构;

2、能够利用解释器模式解决实际问题。

 
   

 


[实验任务一]:解释器模式

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

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. 提交源代码;

// 抽象表达式接口

interface Expression {

    void interpret(Context context);

}

 

 

// 方向解释类

class DirectionExpression implements Expression {

    private String direction;

 

    public DirectionExpression(String direction) {

        this.direction = direction;

    }

 

    @Override

    public void interpret(Context context) {

        context.setDirection(direction);

    }

}

 

 

// 动作解释类

class ActionExpression implements Expression {

    private String action;

 

    public ActionExpression(String action) {

        this.action = action;

    }

 

    @Override

    public void interpret(Context context) {

        context.setAction(action);

    }

}

 

 

// 距离解释类

class DistanceExpression implements Expression {

    private int distance;

 

    public DistanceExpression(int distance) {

        this.distance = distance;

    }

 

    @Override

    public void interpret(Context context) {

        context.setDistance(distance);

    }

}

 

 

import java.util.ArrayList;

import java.util.List;

 

// 复合表达式类

class CompositeExpression implements Expression {

    private List<Expression> expressions = new ArrayList<>();

 

    public void addExpression(Expression expression) {

        expressions.add(expression);

    }

 

    @Override

    public void interpret(Context context) {

        for (Expression expression : expressions) {

            expression.interpret(context);

        }

    }

}

 

 

// 上下文类

class Context {

    private String direction;

    private String action;

    private int distance;

 

    public void setDirection(String direction) {

        this.direction = direction;

    }

 

    public void setAction(String action) {

        this.action = action;

    }

 

    public void setDistance(int distance) {

        this.distance = distance;

    }

 

    public String getInstruction() {

        return direction + " " + action + " " + distance;

    }

}

 

 

 

// 上下文类

class Context {

    private String direction;

    private String action;

    private int distance;

 

    public void setDirection(String direction) {

        this.direction = direction;

    }

 

    public void setAction(String action) {

        this.action = action;

    }

 

    public void setDistance(int distance) {

        this.distance = distance;

    }

 

    public String getInstruction() {

        return direction + " " + action + " " + distance;

    }

}

 

 

 

public class Main {

    public static void main(String[] args) {

        String instruction1 = "up move 5";

        Expression expression1 = InstructionParser.parse(instruction1);

        Context context1 = new Context();

        expression1.interpret(context1);

        System.out.println("指令解析结果:" + context1.getInstruction());

 

        String instruction2 = "down run 10 and left move 20";

        Expression expression2 = InstructionParser.parse(instruction2);

        Context context2 = new Context();

        expression2.interpret(context2);

        System.out.println("指令解析结果:" + context2.getInstruction());

    }

}

3. 注意编程规范。

 

 

标签:distance,direction,String,10.7,void,action,public
From: https://www.cnblogs.com/jais/p/18647874

相关文章

  • 10.7 noip多校联考与牛客CSP-S总结
    我在这里对我今天在牛客考试中进入洛谷做出深刻的反省,我不应该在考试的时候上与考试无关的网站(洛谷),保证没有下犯,在该做什么的时候就做什么,分清主次。10.7noip多校联考与牛客CSP-S总结noip联考T1是一道类似于概率计数DP的题,统计概率。通过题目给出的信息,可以发现使用概率,而统......
  • 10.7 ~ 10.13
    10.7国庆最后一天。大家今天都开学,就我们不开,赢!上午模拟赛。T1看着就是那种很签的题,想了一会发现不会,先把\(O(n^4)\)的暴力写了;然后开始看\(c_{i,j}\le400\)的\(80\%\),想了个枚举颜色+两行的写法,直接开写;写完之后突然发现复杂度是\(n^3c\)的,这不和暴力一个复杂......
  • 10.7 模拟赛
    复盘T1看上去不难。一开始以为枚举\(a,b\),然后考虑平方差。于是想出了这道题的解法。但是转化不过去。后来发现因为\(k\)很小直接暴力预处理就行。30min左右过大样例。T2一眼不会。想到了P1521求逆序对但还是不会做。T3,T4显然不可做。有了前几场的经验,先把所有......
  • 杂念乱写 10.7
    脑子里想的事太多了,不表达出来感觉整个人又要沉下去了,各位酌情观看。真的要看吗我感觉自己是一个功利心很强的人,任何事上都想成为最优秀的那一个,但现实往往是相悖的。一次次落差确实让我的心智成熟了些许,也加重了我在低迷时的心里负担。打模拟赛,我想当得分高的几个;写博客,我......
  • 【计算机方向】IF:10.7,发展势头迅猛,中科院二区TOP神刊!
    期刊解析        ......
  • 电脑长截图滚动截图FastStone Capture v10.7专业授权绿色版
    FastStoneCapture是一款集屏幕捕捉、编辑、导出和屏幕录像为一体的轻量级、多功能截图录屏软件。软件的特色功能是支持电脑长截图滚动截图。它以其简洁高效的操作界面和强大的功能赢得了全球用户的青睐。FastStoneCapture自2000年推出以来,经历了多次更新迭代,每一次升级都是对......
  • Visual Studio 2013 jsoncpp 0.10.7库编译
    前言全局说明VisualStudio2013jsoncpp编译jsoncpp介绍说明:https://www.cnblogs.com/wutou/p/18367551一、说明环境:Windows7旗舰版VisualStudio2013二、选择根据vs2013工具环境和jsoncpp介绍,这里选用0.10.7版本演示三、准备3.1解压文件进入m......
  • 北斗/GNSS高精度数据处理暨GAMIT/GLOBK v10.75软件
    随着GNSS导航定位技术在不同领域的广泛应用和技术更新的飞速发展,在大型工程项目的设计、施工、运行和管理各个阶段对工程测量提出了更高的要求,许多测绘、勘测、规划、市政、交通、铁道、水利水电、建筑、矿山、道桥、国土资源、气象、地震等行业部门在大型工程建设过程中需应用......
  • 北斗/GNSS高精度数据处理暨GAMIT/GLOBK v10.75软件应用
    目录第一部分、UBUNTU操作系统介绍与基本使用第二部分、GAMIT/GLOBK软件安装第三部分、数据获取与预处理第四部分、分步式“玩转”GAMIT软件第五部分、应用GAMIT+网平差软件进行高精度北斗/GNSS工程控制网数据处理与精度评估第六部分、“玩转”TRACK软件第七部分、分步......
  • Nessus Professional 10.7.5 Auto Installer for macOS Sonoma (updated Jul 2024)
    NessusProfessional10.7.5AutoInstallerformacOSSonoma(updatedJul2024)发布Nessus试用版自动化安装程序,支持macOSSonoma、RHEL9和Ubuntu24.04请访问原文链接:https://sysin.org/blog/nessus-auto-install-for-macos/,查看最新版。原创作品,转载请保留出处。作......