《数据结构与抽象:Java语言描述(原书第4版)》一练习

简介:

本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第1章 ,第1.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

练习

1.说明程序清单1-3中给出的类PiggyBank的每个方法:说明方法的目的;描述它的参数;写前置条件、后置条件和方法头的伪代码。然后写一个用于这些方法的Java接口,包括javadoc风格的注释。
2.假定groceryBag是一个包,它被表示不同杂货名字的10个字符串填满了。写Java语句,计数groceryBag中"soup"的出现次数并全部删除。不要从包中删除任何其他的字符串。报告包中出现的"soup"的个数。groceryBag中可能不包含"soup"。
3.给定如练习2中所描述的groceryBag,对groceryBag进行操作groceryBag.toArray(),会有什么影响?
4.给定如练习2中所描述的groceryBag,写Java语句,创建这个包中的不同字符串的数组。即,如果"soup"在groceryBag中出现3次,则它在数组中应该仅出现一次。数组创建完成后,groceryBag的内容应该不变。
5.两个集合的并集是将它们的内容合并到一个新集合中。在ADT包的BagInterface接口中添加一个方法union,它返回由接收调用方法的包和方法参数的包的并得到的一个新包。包含对方法进行充分说明的足够的注释。
注意,两个包的并集可能含有重复项。例如,如果对象x在一个包中出现5次,在另一个包中出现2次,则在这两个包的并集中x出现7次。具体来说,假定bag1和bag2都是Bag对象,这里,Bag实现了BagInterface;bag1含有String对象a、b和c;而bag2含有String对象b、b、d和e。执行下列语句后
image

包everything中含有字符串a、b、b、b、c、d和e。注意,union不影响bag1和bag2的内容。
6.两个集合的交集是同时出现在两个集合中的项组成的新集合。即,它含有重复部分的项。在ADT包的BagInterface接口中添加一个方法intersection,它返回由接收调用方法的包和方法参数的包的交得到的一个新包。包含对方法进行充分说明的足够的注释。
注意,两个包的交集可能含有重复项。例如,如果对象x在一个包中出现5次,在另一个包中出现2次,则在这两个包的交集中x出现2次。具体来说,假定bag1和bag2都是Bag对象,这里,Bag实现了BagInterface。bag1含有String对象a、b和c;而bag2含有String对象b、b、d和e。执行下列语句后
image

包commonItems仅含有字符串b。如果b在bag1中出现2次,则commonItems将含有2个b,因为bag2也含有2个b。注意,intersection不影响bag1和bag2的内容。
7.两个集合的差集是在一个集合中删除第二个集合中也出现的项后剩余的项组成的新集合。在ADT包的BagInterface接口中添加一个方法difference,它返回由接收调用方法的包和方法参数的包的差得到的一个新包。包含对方法进行充分说明的足够的注释。
注意,两个包的差集可能含有重复项。例如,如果对象x在一个包中出现5次,在另一个包中出现2次,则在这两个包的差集中x出现3次。具体来说,假定bag1和bag2都是Bag对象,这里,Bag实现了BagInterface。bag1含有String对象a、b和c;而bag2中含有String对象b、b、d和e。执行下列语句后
image

包leftOver1中含有字符串a和c。执行下列语句后
image

包leftOver2中含有字符串b、d和e。注意,difference不影响bag1和bag2的内容。
8.写代码完成下列任务:考虑两个能含有字符串的包。一个包名是letters,含有多个单字符的字符串。另一个包是空包,名为vowels。每次从letters中删除一个字符串。如果字符串含有一个元音,则将它放入包vowels中;否则,丢弃这个串。在检查了letters中的所有字符串后,报告包vowels中的元音数,及包中每个元音的出现次数。
9.写代码完成下列任务:考虑3个能含有字符串的包。一个包名是letters,含有多个单字符的字符串。另一个包名为vowels,含有5个字符串,每一个是一个元音。第三个包是空包,名为consonants。每次从letters中删除一个字符串。检查该字符串是否在包vowels中。如果在,丢弃这个串;否则,将它放入包consonants中。在检查了letters中的所有字符串后,报告包consonants中的辅音数及包中每个辅音的出现次数。

项目

1.如1.5节所述,集合是一个不允许有重复值的特殊包。假定类Set实现了SetInterface。给定空集合,其对象是Set,且给定含有多个字符串的类Bag的一个对象,写客户语句,从给定的包创建一个集合。
2.假定桌上有一堆书。每本书太重太大,你只能拿走这堆书中最上面的一本。不能从其他书下拿走一本。类似地,可以在这堆书的最上面放另一本从而在这堆书中增加一本。不能在其他书下面增加一本。
如果仅用书名表示书,设计一个可以用来记录桌上书堆中的书的类。规范说明每个方法:说明方法的目的;描述它的参数;写方法头的伪代码。然后写一个用于书堆方法的Java接口。在代码中包括javadoc风格的注释。
3.环(ring)是项的集合(collection),它有一个指向当前项的引用。操作(称为advance)将引用指向集合(collection)中的下一项。当引用到达最后一项时,下一次advance操作将引用指回第一项。环还有得到当前项、添加一项及删除一项的操作。项添加的位置及删除的位置由你来定。
设计一个ADT来表示对象的环。说明每个方法:说明方法的目的;描述它的参数;写方法头的伪代码。然后写一个用于环方法的Java接口。在代码中包括javadoc风格的注释。
4.一盒(shoe)扑克牌中含有一些标准的卡牌。盒中的这些牌可以洗牌,然后一次打出一张。也可以计算盒中牌的张数。
当一把牌打完后,应该将所有的牌放回盒中并洗牌。有些纸牌游戏要求,当牌盒变空时,弃牌堆中的牌要放回盒中。然后重洗盒中的牌。在本例中,不是所有的牌都在盒中;有些牌被玩家拿着。
设计一个盒的ADT,假定你有类PlayingCard,你也应该说明它。不需要一个ADT纸牌,因为纸牌是牌张数为1的一个盒。
说明每个ADT操作;说明方法的目的;描述它的参数;写方法头的伪代码。然后写一个用于盒的方法的Java接口。在代码中包括javadoc风格的注释。
5.安装空调的一次投标包括公司名、设备描述、设计性能、设备价格及安装费用。
设计表示任意投标的一个ADT。然后设计另外一个ADT,表示投标集合。第二个ADT应该包含根据价格和性能查找投标的方法。还要注意,一个公司能投多个标,每个有不同的设备。
说明每个ADT操作;说明方法的目的;描述它的参数;写方法头的伪代码。然后写一个用于投标方法的Java接口。在代码中包括javadoc风格的注释。
6.一个矩阵是数值的一个矩形数组。可以将两个矩阵相加或相乘得到第三个矩阵。可以用一个矩阵乘上一个标量,可以转置矩阵。设计一个表示有这些操作的矩阵的ADT。
说明每个ADT操作;说明方法的目的;描述它的参数;写方法头的伪代码。然后写一个用于矩阵方法的Java接口。在代码中包括javadoc风格的注释。

自测题答案

image

2.不合法。两个方法有相同的签名。我们记得,方法的返回值类型不是签名的一部分。这些方法有相同的名字和参数列表。
3.合法。两个方法有不同的签名。它们是重载方法。
image

image

相关文章
|
18天前
|
安全 Java 大数据
探索Java的奇妙世界:语言特性与实际应用
探索Java的奇妙世界:语言特性与实际应用
|
6天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
52 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
6天前
|
网络协议 Java 数据库连接
Java语言的特点
【5月更文挑战第7天】Java是一种面向对象的编程语言,强调数据和操作的封装,具备平台独立性,能“一次编写,到处运行”。它有自动垃圾收集机制,消除手动内存管理。Java是强类型语言,注重安全性,并支持多线程编程。其丰富的API库和对网络编程的良好支持增强了功能。此外,Java的可扩展性使其能轻松适应新需求和扩展。
21 4
|
6天前
|
分布式计算 Java 大数据
Java语言主要应用领域
【5月更文挑战第7天】Java在嵌入式系统中以低至130KB的占用展现可靠性,实现“一次编写,到处运行”。在大数据领域,Java通过Hadoop、Hbase、Accumulo和ElasticSearch等工具发挥关键作用。Java也是Eclipse、IntelliJ IDEA和NetBeans等开发工具的基础。广泛应用于电商网站和金融服务器系统,即便在J2ME式微后,仍能在部分低端手机中找到其踪影。
17 4
|
9天前
|
存储 缓存 算法
【C 言专栏】C 语言中的数据结构应用
【5月更文挑战第4天】本文探讨了C语言中的核心数据结构,包括数组、链表(单链表和双链表)、栈、队列、二叉树(如二叉搜索树和二叉堆)以及图结构。这些数据结构在程序设计中扮演着关键角色,如数组的快速访问、链表的动态管理、栈和队列的处理流程控制、树和图的复杂关系表示。理解并选择适当的数据结构可优化程序性能,而内存管理和算法优化则进一步提升效率。通过案例分析和展望未来发展趋势,本文旨在帮助读者深化对C语言数据结构的理解和应用。
【C 言专栏】C 语言中的数据结构应用
|
14天前
|
Java
Java语言---面向对象的三大特征之继承
Java语言---面向对象的三大特征之继承
|
14天前
|
存储 Java
Java语言--->数据类型转化以及运算符
本文讲述了Java中的基本数据类型转换和运算符。在转换中,布尔型除外的8种类型可通过默认或强制转换相互转化,如`byte->short->int->long->float->double`。默认转换发生在不同类型运算时,系统会转为更大容量类型。强制转换可能引起精度损失或溢出。运算符包括算术(如+可做加法或字符串拼接)、比较、逻辑和赋值运算符。比较运算符如`==`、`<`等产生`boolean`结果,逻辑运算符`&&`、`||`具有短路效应。赋值运算符如`+=`简化了赋值过程。运算符的优先级也进行了简要说明。
|
14天前
|
Java 编译器 程序员
Java语言基础
Java语言基础概览:涵盖关键字(全小写,如`image.png`所示),保留字(如`goto`、`const`),标识符命名规则(避免数字开头和保留字),注释(单行`//`,多行`/*...*/`,及Javadoc注释)以及变量(按数据类型:byte, short, int, long, float, double, char, boolean,注意声明规则和默认类型)。
|
18天前
|
存储 安全 Java
Java程序员必须掌握的数据结构:HashMap
HashMap底层原理实现是每个Java Boy必须掌握的基本技能,HashMap也是业务开发每天都需要遇到的好伙伴。如此基础且核心的底层数据结构,JDK也给其赋予了线程安全的功能,我们来看看~
39 2
Java程序员必须掌握的数据结构:HashMap
|
18天前
|
存储 安全 Java
Java并发编程中的高效数据结构:ConcurrentHashMap解析
【4月更文挑战第25天】在多线程环境下,高效的数据访问和管理是至关重要的。Java提供了多种并发集合来处理这种情境,其中ConcurrentHashMap是最广泛使用的一个。本文将深入分析ConcurrentHashMap的内部工作原理、性能特点以及它如何在保证线程安全的同时提供高并发性,最后将展示其在实际开发中的应用示例。