多彩的声音-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)

news2024/9/22 23:39:35

 【案例4-3】多彩的声音

记得 关注,收藏,评论哦,作者将持续更新。。。。

【案例介绍】

  1. 案例描述

设计和实现一个Soundable发声接口,该接口具有发声功能,同时还能调节声音大小。

Soundable接口的这些功能将由有3种声音设备来实现,他们分别是收音机Radio、随身听Walkman、手机MobilePhone。最后还需设计一个应用程序类来使用这些实现Soundable接口的声音设备。程序运行时,先询问用户想哪个设备,用户选择设备后,程序按照该设备的工作方式打印发出的发音。

本案例要求使用抽象类实现。

  1. 运行结果

【案例分析】

1)通过任务的描述可知,此程序包含了一个发声接口SoundableSoundable接口的有三个声音设备实现类实现了Soundable接口,分别是收音机类Radio,随身听类Walkman和手机类Mobilephon

2RadioWalkmanMobilePhon这三个声音设备实现类需要分别实现Soundable接口接口的相关功能。

3)然后,还需设计一个应用程序类来使用这些实现Soundable接口的声音设备。

4)最后编写测试类,在main()方法中,编写程序,使用户可以自主选择要使用的设备;创建使用设备的对象,根据用户选择的声音设备,调用相关方法,模拟使用声音设备对应的功能。

【案例实现】

Soundable.java

  1. public interface Soundable {
  2.     // 发出声音
  3.     public void playSound() ;
  4.     // 降低声音
  5.     public void decreaseVolume();
  6.    // 停止声音
  7.     public void stopSound();
  8. }

上述代码中,创建了一个Soundable接口,在接口中定义了三个方法playSound()decreaseVolume()stopSound()

SampleDisplay.java

  1. import java.util.Scanner;
  2. public class SampleDisplay {
  3.      public void display(Soundable soundable) {
  4.             soundable.playSound();
  5.             System.out.println("您是否要降低音量?");
  6.             System.out.println("1-  2-");
  7.             Scanner in = new Scanner(System.in);
  8.             if(in.nextLine().equals("1")) {
  9.              soundable.decreaseVolume();
  10.             }
  11.             System.out.println("您是否要关机?");
  12.             System.out.println("1-  2-");
  13.             Scanner ins = new Scanner(System.in);
  14.             if(in.nextLine().equals("1")) {
  15.                 soundable.stopSound();
  16.             }
  17.         }
  18. }

上述代码中,创建了一个SampleDisplay类,在SampleDisplay类中编写了display(Soundable soundable)方法,根据传入的声音设备的对象,调用相关方法,模拟使用声音设备对应的功能。

Radio.java

  1. public class Radio implements Soundable{
  2.     @Override
  3.     public void playSound() {
  4.         System.out.println("收音机播放广播:第八套小学生广播体操");
  5.     }
  6.     @Override
  7.     public void decreaseVolume() {
  8.         System.out.println("已降低收音机音量。");
  9.     }
  10.     @Override
  11.     public void stopSound() {
  12.         System.out.println("已关闭收音机。");
  13.     }
  14. }

上述代码中,创建了一个Radio类并实现了Soundable接口,同时,实现了Soundable接口的三个方法:playSound()decreaseVolume()stopSound()

Walkman.java

  1. public class Walkman implements Soundable{
  2.     @Override
  3.     public void playSound() {
  4.         System.out.println("正在播放歌曲:七里香");
  5.     }
  6.     @Override
  7.     public void decreaseVolume() {
  8.         System.out.println("已降低随身听音量");
  9.     }
  10.     @Override
  11.     public void stopSound() {
  12.         System.out.println("已关闭随身听");
  13.     }
  14. }

上述代码中,创建了一个Walkman类并实现了Soundable接口,同时,实现了Soundable接口的三个方法:playSound()decreaseVolume()stopSound()

MobilePhone.java

  1. public class MobilePhone implements Soundable{
  2.     @Override
  3.     public void playSound() {
  4.         System.out.println("手机发出来电铃声:叮当 叮当");
  5.     }
  6.     @Override
  7.     public void decreaseVolume() {
  8.         System.out.println("已降低手机音量");
  9.     }
  10. @Override
  11. public void stopSound() {
  12.     System.out.println("已关闭手机");
  13.   } 
  14. }

上述代码中,创建了一个MobilePhone类并实现了Soundable接口,同时,实现了Soundable接口的三个方法:playSound()decreaseVolume()stopSound()

TestDemo.java

  1. import java.util.Scanner;
  2. public class TestDemo {
  3.     public static void main(String[] args) {
  4.         Scanner in = new Scanner(System.in);
  5.         System.out.println("你想听什么?请输入:");
  6.         System.out.println("0-收音机  1-随身听  2-手机");
  7.         int choice;
  8.         choice = in.nextInt();
  9.         SampleDisplay sampledisplay = new SampleDisplay();
  10.         if (choice == 0)
  11.             sampledisplay.display(new Radio());
  12.         else if(choice == 1)
  13.             sampledisplay.display(new Walkman());
  14.         else if(choice == 2)
  15.             sampledisplay.display(new MobilePhone());
  16.         else 
  17.             System.out.println("您的输入有误,请重新输入!");
  18.         in.close();
  19.     }
  20. }

上述代码中,首先创建了一个sampledisplay对象,然后,根据用户选择使用的声音设备,通过sampledisplay对象调用display()方法并传入声音设备对象,模拟使用声音设备相关的功能。

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

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

相关文章

【C++的OpenCV】第一课-opencv的介绍和安装(Linux环境下)

第一课-目录一、基本介绍1.1 官网1.2 git源码1.3 介绍二、OpenCV的相关部署工作2.1 Linux平台下部署OpenCV一、基本介绍 1.1 官网 opencv官网 注意:官网为英文版本,可以使用浏览器自带的翻译插件进行翻译,真心不推荐大家去看别人翻译的&am…

vue实现xml在线编辑功能

先看效果 避免误会 这是一个在线编辑器 我们可以在这上面随意的编写xml代码格式 我们修改上面的内容之后 就可以在控制台输出内容 如果这正是您想要的东西 那就可以先创建一个vue项目 我们先引入依赖 npm install brace -S npm install element-ui -S npm install vue-cli…

原型链污染

目录 前置知识 原型对象 prototype和__proto__的区别 原型链概念 原型链的继承 原型 链污染 原型链污染原理 javascript中可能会存在原型链污染的危险函数 原型链污染的实际应用 JavaScript中可以触发弹窗的函数 前置知识 原型对象 在JavaScript中,每个函…

9-静态链表及其有关操作

链表可以用malloc/new和结构体加指针的方式来实现,那种实现方式实现的链表又被称为动态链表。但是我们还可以利用数组的方式来实现一个链表,这种实现方式称为静态链表。 静态单链表 我们知道,一个链表节点主要由两大部分组成:数…

黑马Spring学习笔记(一)——IOC/DI核心概念、入门案例

目录 一、Spring系统架构和学习路线 二、Spring核心概念 2.1 IOC、IOC容器、Bean、DI 2.1.1 IOC(Inversion of Control)控制反转 2.1.2 DI(Dependency Injection)依赖注入 2.2 核心概念小结 三、入门案例 3.1 IOC入门…

【C++入门】引用、内联函数、auto关键字、基于范围的for循环(C++11)、指针空值nullptr(C++11)

文章目录引用引用概念引用特性引用使用场景常引用内联函数宏的优缺点?C有哪些技术替代宏?auto关键字auto不能推导的场景基于范围的for循环(C11)指针空值nullptr(C11)引用 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名&…

一篇搞懂UnitTest

unittest单元测试框架是受到 JUnit 的启发,与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化、支持将测试样例聚合到测试集中,并将测试与报告框架独立开来。unittest模块是Python标准库中的模块。在此之前需要先了解几个概念&#xff1a…

linux高级命令之线程执行带有参数的任务

线程执行带有参数的任务学习目标能够写出线程执行带有参数的任务1. 线程执行带有参数的任务的介绍前面我们使用线程执行的任务是没有参数的,假如我们使用线程执行的任务带有参数,如何给函数传参呢?Thread类执行任务并给任务传参数有两种方式:args 表示以…

NTC热敏电阻

NTC热敏电阻: 负温度系数热敏电阻。 Negative Temperature Coefficient Thermistor 特性: 由锰 (Mn) 、镍 (Ni) 、钴 (Co) 等成分的氧化物烧制而成的陶瓷。阻值随温度上升而下降。 工作温度范围宽:一般的都可用于-40℃ to 125℃。有的高…

[Pytorch] Linear层输出nan

参考链接: https://discuss.pytorch.org/t/well-formed-input-into-a-simple-linear-layer-output-nan/74720/11 总结原因: numpy需要更新 PS. 查看numpy版本号 打开Anaconda Prompt 进入环境 输入命令conda activate envname 然后输入pip show numpy…

MongoDB 自动增长

MongoDB 自动增长 MongoDB 没有像 SQL 一样有自动增长的功能, MongoDB 的 _id 是系统自动生成的12字节唯一标识。但在某些情况下,可能需要实现 ObjectId 自动增长功能。而MongoDB 并没有提供这个功能,那么可以通过编程的方式来实现_id字段自…

Qt音视频开发14-音视频文件保存基类的设计

一、前言 视频综合应用示例,包括了多种内核,在保存文件这个功能上,需要一个通用的文件保存基类AbstractSaveThread,这个基类定义了是否打印线程消息标志位、直接写入还是排队写入标志位、文件生成后是否调用转换合并标志位、是否…

Linux下的Jenkins安装教程

当前环境 CentOS 7.8Java 11(注意当前jenkins支持的Java版本最低为Java11)FinalShell 3.9(操作环境) 安装Jenkins PS:不建议使用Docker安装Jenkins,因为使用Jenkins的时候一般会调用外部程序,…

【猜名次】-C语言-题解

1. 描述: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二&#x…

【工作10年+的大厂资深架构师万字长文总结 精华收藏!】怎样设计高可用、高性能系统?关于高可用高性能系统架构和设计理论和经验总结...

本文从研发规范层面、应用服务层面、存储层面、产品层面、运维部署层面、异常应急层面这六大层面去剖析一个高可用的系统需要有哪些关键的设计和考虑.O、前言随着业务在线化互联网化的高速发展,企业对核心业务系统的稳定性、可靠性、有效性、业务连续性等有了更高的…

openpnp - 普通航空插头和PCB的连接要使用线对板连接器

文章目录openpnp - 普通航空插头和PCB的连接要使用线对板连接器概述改进实际效果总结ENDopenpnp - 普通航空插头和PCB的连接要使用线对板连接器 概述 和同学讨论问题, 准备将航空插头连接到PCB上. 航空插头选用GX12-4公头, 拧到开孔的铁板上. 然后航空插头公头再与PCB连接. 铁…

【数据库】HNU数据库系统期末考试复习重点

前言 今天刚结束考试,考的范围基本没有超过这套重点内容,觉得整理的这份资料还算比较有用,遂睡前整理了下分享给大家,希望能帮到要准备数据库期末又时间紧张的学弟学妹~ 文章参考: 1.课程老师发《数据库期末考试复习…

【项目精选】基于网络爬虫技术的网络新闻分析(论文+源码+视频)

基于网络爬虫技术的网络新闻分析主要用于网络数据爬取。本系统结构如下: (1)网络爬虫模块。 (2)中文分词模块。 (3)中3文相似度判定模块。 (4)数据结构化存储模块。 &…

120个IT冷知识,看完就不愁做选择题了

目录 IT冷知识 01-10 1.冰淇淋馅料 2.蠕虫起源 3.Linux和红帽子 4."间谍软件"诞生 5.游戏主机的灵魂 6.Linux之父 7.NetBSD的口号 8.安卓起源 9.不是第七代的 Win 7 10.域名金字塔 11~20 11.神奇魔盒 12. 第一个Ubuntu 正式版本 13.巾帼英雄 14.密码…

【高可用系统架构设计】SLA服务可用性4个9是什么意思?如何保证服务的高可用性 HA(High Availability)?...

如何保证服务的高可用性 HA(High Availability)?高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。方法论上,高可用是通…