速度计算-课后程序(JAVA基础案例教程-黑马程序员编著-第十二章-课后作业)

news2024/9/25 21:20:13

【案例12-2】:速度计算

【案例介绍】

1.案例描述

本案例要求使用反射技术编写一个速度计算程序,计算某种交通工具的行驶速度。现有两种工具:Bike和 Plane,其中Bike的速度运算公式为:A*B/C,Plane的速度运算公式为:A+B+C。

用户可通过输入交通工具名称选择自己想要使用的交通工具,选择交通工具之后,自动计算出该交通工具的行驶速度。此外,在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序即可。

2.运行结果

 

运行结果

【案例分析】

(1)通过任务描述可知,有两种交通工具Plane和Bike,对应的类为Plane类、Bike类。

(2)由于任务要求在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序,故还需要编写一个接口Common,且Plane类和Bike类都继承Common接口。

(3)最后编写一个测试类CaculateSpeed,在main()方法中,编写程序,提示用户输入自己想要使用的交通工具,并利用反射来计算交通工具的速度。

【案例实现】

Common.java

  1. public interface Common {
  2.      double getSpeed(double a,double b,double c);
  3. }

上述代码中,定义了一个Common接口,在Common接口中定义了一个抽象方法getSpeed()。

Bike.java

  1. public class Bike implements Common {
  2.      @Override
  3.      public double getSpeed(double a, double b, double c) {
  4.           return a*b/c;
  5.      }
  6. }

上述代码中,定义了一个Bike类并实现了Common接口,在Bike类中对getSpeed()方法方法进行了重写。

Plane.java

  1. public class Plane implements Common {
  2.      @Override
  3.      public double getSpeed(double a, double b, double c) {
  4.           return a+b+c;
  5.      }
  6. }

上述代码中,定义了一个Plane类并实现了Common接口,在Plane类中对getSpeed()方法进行了重写。

CaculateSpeed.java

  1. package chapter1202;
  2. import java.util.Scanner;
  3. public class CaculateSpeed {
  4.     public static void main(String[] args){
  5.         Scanner in = new Scanner(System.in);
  6.         System.out.println("请输入您要使用的交通工具名称:");
  7.         String choice =in.nextLine();
  8.         String transport = "fanshe."+choice; //fanshe”必须是当前类所在的包名
  9.         double a = 23, b = 24, c = 25;
  10.         try {
  11.             Common newtransport = (Common)
  12.                     Class.forName(transport).newInstance();
  13.             System.out.println(choice+" speed is : " +
  14.                     ""+newtransport.getSpeed(a,b,c));
  15.         } catch (InstantiationException e) {
  16.             e.printStackTrace();
  17.         } catch (IllegalAccessException e) {
  18.             e.printStackTrace();
  19.         } catch (ClassNotFoundException e) {
  20.             e.printStackTrace();
  21.         }
  22.     }
  23. }

上述代码中,定义了一个测试类CaculateSpeed,其中第7行代码声明了一个transport对象,用于获取全限定类名;第11~12行代码是通过反射对transport对象进行实例化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven多模块开发

POM主要功能 maven学习教程很多,就不在赘述可以参考以下网站,这里只说明maven实际运用。 https://blog.csdn.net/xwh3165037789/article/details/121545762 菜鸟教程 Maven POM POM是在使用Maven构建项目最重要的部分, POM 中所有信息位于&l…

史上体积最小、功能最多的VxRail即将上市!

有史以来      最小、最灵活、最多的      VxRail集群      Dell VxRail VD-4000重磅登场!    戴尔即将全球推出VxRail超融合基础架构系统——基于PowerEdge XR4000的VxRail VD-4000(计划今年2月底全球同步上市)。      VD-4000具备小型专用外形,这种新的外…

帮助小型企业实现业务增长的7种数字营销策略

数字营销一直在不断地变化和发展,在过去的几年里我们已经见识到了其迅猛的发展速度。虽然我们在数字营销中看到了一些新的趋势,但对于小型企业来说很难利用并发挥其优势。相比较大型企业,小型企业的预算和资源通常有限,所以他们很…

Qt插件开发总结5--主界面嵌入插件UI

文章目录一、前言二、效果展示三、嵌入插件UI1、插件接口文件添加UI指针2、插件子项目工程建立UI类3、插件类中创建UI类、使UI指针指向创建的UI类4、插件元信息中添加widget键值对,指示插件UI嵌入主界面中的位置5、主界面中预留接入点tabWidget6、插件管理器中元数据…

9 怎么登录VNC

1)首先在ssh登录后启动vncserver。登陆后输入下面的指令来创建自己的VNC。 命令vncserver :16 –geometry 1900x1000 其中:16是分配的端口号,1900x1000是分辨率。如果没有响应,建议执行下面操作后再次重复上面操作。 命令&#xf…

拦截器和过滤器的区别是什么

过滤器 过滤器Filter是基于Servlet实现。Servlet的工作原理是拦截配置好的客户端请求,然后对Request和Response进行处理。Filter过滤器随着web应用的启动而启动,只初始化一次。 过滤器的配置比较简单,直接实现Filter 接口就可以了&#xff…

Python 虚拟环境的使用

PyCharm 创建的虚拟环境与使用 workon 命令创建的虚拟环境在本质上没有区别,它们都是 Python 的虚拟环境。 使用 PyCharm 创建工程时,使用可以使用曾经工程的虚拟环境,或者新建一个虚拟环境来安装 Python 的库,又或者使用 workon…

org.postgresql.util.PSQLException

1.使用springboot整合postgresql时报错&#xff1a;org.postgresql.util.PSQLException 1.1依赖 使用spring boot和postgresql搭建简单demo <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</arti…

Git概述

查看git版本&#xff1a; git --version1、Git概述 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。 Git 易于学习&#xff0c;占地面积小&#xff0c;性能极快。它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作…

【C++基础入门】运算符、程序流程结构(if语句,for循环,switch语句等)

一&#xff1a;运算符 作用&#xff1a;用于执行代码的运算 运算符类型作用算术运算符用于处理四则运算赋值运算符用于将表达式的值赋给变量比较运算符用于表达式的比较&#xff0c;并返回一个真值或假值逻辑运算符用于根据表达式的值返回真值或假值 1.1 算术运算符 作用 &a…

PDF编辑/PDF浏览/PDF打印:PDFPrinting.NET Crack

PDFPrinting.NET高级 PDF 编辑库&#xff0c;可完全控制您的 PDF 创建工作流程 我们为 PDF 创建和编辑提供高级和低级 API。从简单的文档拆分到单个元素的精确删除。 从头开始创建 PDF 文档。 编辑现有文件。 支持创建、插入或删除 PDF 元素。 允许更改 PDF 的加密和压缩。 自…

计算机组成原理4小时速成7:存储器和cpu的连接,位扩展,字扩展,存储器的校验,汉明码编码纠错检错

计算机组成原理4小时速成7&#xff1a;存储器和cpu的连接&#xff0c;位扩展&#xff0c;字扩展&#xff0c;存储器的校验&#xff0c;汉明码编码纠错检错 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都…

C/C++每日一练(20230302)

目录 1. 个位数是6&#xff0c;且能被3整除的五位数共有多少个&#xff1f; ☆ 2. 不同方式求n的阶乘 ★ 3. 报数游戏 ★☆ 1. 个位数是6&#xff0c;且能被3整除的五位数共有多少个&#xff1f; 答案&#xff1a; 3000 &#xff0c;代码略 2. 不同方式求n的阶乘 求n的…

sdwan方案有哪些 SD-WAN怎么搭建

随着sdwan网络架构的形成到目前的广泛应用到各行业之中&#xff0c;足见sdwan方案已经逐步的走向成熟。sdwan软件定义网络可在包括公共Internet&#xff0c;MPLS和宽带在内的标准网络传输服务上运行&#xff0c;解决了很多跨区域之间网络传输数据的难题。那么&#xff0c;sdwan…

软件测试4

一 form表单标签 1.form表单标签里面就是所有用户填写的表单数据&#xff1b; action“xxx.py”把表单数据提交给哪一个后台程序去处理 method“post” 传递数据时候的方式方法&#xff0c;post代表隐式提交数据、get明文传送数据 2.input标签的type类型 type“text” 普通的输…

优思学院|解密六西格玛:探索DMAIC和DMADV之间的区别

六西格玛方法中最为广泛使用的两种方法是DMAIC和DMADV。这两种方法都是为了让企业流程更加高效和有效而设计的。虽然这两种方法有一些重要的共同特点&#xff0c;但它们并不可以互相替代&#xff0c;并且被开发用于不同的企业流程。在更详细地比较这两种方法之前&#xff0c;我…

扬帆优配|突发利空,千亿巨头重挫!凭“一己之力”

马斯克效应持续凸显&#xff0c;稀土永磁板块早盘大跌&#xff0c;千亿市值的北方稀土跌超4%。 近来&#xff0c;马斯克凭“一己之力”带火A股卫星互联网、毫米波雷达两大概念板块&#xff0c;多只相关个股闻风大涨。 今日&#xff0c;马斯克效应在A股再度应验。在当地时间3月…

功能测试前还需要做哪些准备?

概述 在项目管理流程中&#xff0c;有几个关键阶段&#xff1a; 需求阶段 开发阶段 测试阶段 上线阶段 其中的需求阶段和开发阶段是最为重要的&#xff0c;一个是设计&#xff0c;定义这个功能如何运作&#xff0c;一个是执行与实现&#xff0c;这两个阶段把控好了&#…

从安卓系统USB升级包里提取system.img、boot.img和recovery.img在内的镜像文件

1.前言 如果你拿到一个USB升级包&#xff0c;你会发现升级包的结构基本相似。 但是里面并不是直接就有包括system.img、boot.img和recovery.img在内的镜像文件。 如果我们需要在Android手机上获取Magisk。提取内核&#xff08;boot.img&#xff09;就至关重要。当然其他镜像根…

不能去演唱会现场就多听听耳机里的他们,教你用python来实现一个音乐播放器

前言 最近可以说大麦网很知名了&#xff0c;哈哈还有好多想要用Python来搞抢票脚本的 怎么说呢也不是不行&#xff0c;但是咱今天可不是来搞这个的&#xff0c;我可不抢票&#xff0c;抢了都去不了&#xff0c;上班搞钱啊铁铁们 咱就是说去不了现场&#xff0c;就多听听手机…