尝试向 Queue 类添加异常

尝试向 queue 类添加异常

练习文件:
queuefullexception.java
queueemptyexception.java
固定队列.java
qexcdemo.java

在这个项目中,为队列类(queue)创建了两个自定义异常,分别指示满队列和空队列的错误情况。这些异常由 put() 和 get() 方法使用。

队列异常:

queuefullexception:尝试将元素插入完整队列时抛出异常。该类包含一个用于存储最大队列大小的字段,并重写 tostring() 方法以显示自定义消息。queueemptyexception:尝试从空队列中删除元素时抛出异常。该类还重写 tostring() 以在队列为空时显示消息。

fixedqueue 类实现:

Reclaim.ai Reclaim.ai

为优先事项创建完美的时间表

Reclaim.ai 90 查看详情 Reclaim.ai fixedqueue 类已修改为在发生错误情况时抛出 queuefullexception 和 queueemptyexception。为此,put() 和 get() 在其签名中包含一个 throws 子句。通过抛出异常,您可以让调用代码更有效地处理错误。

异常和fixedqueue类代码:
queuefullexception.java

public class queuefullexception extends exception {  int size;  queuefullexception(int s) { size = s; }  public string tostring() {    return "\nqueue is full. maximum size is " + size;  }}

queueemptyexception.java:

public class queueemptyexception extends exception {  public string tostring() {    return "\nqueue is empty.";  }}

fixedqueue.java:

class fixedqueue implements icharq {  private char q[];  private int putloc, getloc;  public fixedqueue(int size) {    q = new char[size];    putloc = getloc = 0;  }  public void put(char ch) throws queuefullexception {    if (putloc == q.length)      throw new queuefullexception(q.length);    q[putloc++] = ch;  }  public char get() throws queueemptyexception {    if (getloc == putloc)      throw new queueemptyexception();    return q[getloc++];  }}

使用 qexcdemo 进行测试:
qexcdemo类模拟队列的使用:
插入元素直到超过限制,抛出 queuefullexception。
它尝试通过抛出 queueemptyexception 从空队列中删除元素。

class qexcdemo {  public static void main(string args[]) {    fixedqueue q = new fixedqueue(10);    char ch;    int i;    try {      for(i=0; i < 11; i++) {        system.out.print("attempting to store : " + (char) ('a' + i));        q.put((char) ('a' + i));        system.out.println(" - ok");      }    } catch (queuefullexception exc) {      system.out.println(exc);    }    try {      for(i=0; i < 11; i++) {        system.out.print("getting next char: ");        ch = q.get();        system.out.println(ch);      }    } catch (queueemptyexception exc) {      system.out.println(exc);    }  }}

更新了 icharq 界面:
icharq 现在在 put() 和 get() 方法中包含抛出异常,反映了固定队列抛出的异常。

public interface ICharQ {  void put(char ch) throws QueueFullException;  char get() throws QueueEmptyException;}

预期输出:
程序会显示指示元素插入和删除成功的消息,以及错误消息:
队列已满。当队列已满时,最大大小为 10。
队列为空。当尝试从空队列中删除元素时。

以上就是尝试向 Queue 类添加异常的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1006924.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月1日 23:35:59
下一篇 2025年12月1日 23:36:20

相关推荐

  • Day/Days of Code:探索 JavaScript 函数的多功能性

    2024 年 8 月 20 日,星期二 虽然我见过 JavaScript 箭头函数,但我不知道 JavaScript 中声明函数的多种方法。这些可以非常紧凑,并且还有函数表达式,它将函数与变量混合在一起。尽管 JavaScript 的语法受到 C/C+± 的启发,但这感觉更现代。 明天,我将练习石头…

    2025年12月19日
    000
  • 构建可扩展的 Azure 静态 Web 应用程序来处理高流量网站

    tl;dr: azure static web apps 的免费托管计划可能无法满足高流量需求。通过最小化和压缩资产、优化图像加载、实施缓存、使用企业级边缘和自动缩放来扩展这些应用程序,以增强全球用户的性能、安全性和效率。 在当今的软件开发世界中,您的应用程序不仅服务于本地社区,还覆盖来自全球各个角…

    2025年12月19日
    000
  • Web 开发的未来:每个开发人员都应该了解的新兴趋势和技术

    简介 Web 开发从早期的静态 HTML 页面和简单的 CSS 设计已经走过了漫长的道路。多年来,在技术进步和用户对更具动态性、交互性和响应性的网站不断增长的需求的推动下,该领域发展迅速。随着互联网成为日常生活中不可或缺的一部分,网络开发人员必须不断适应新趋势和技术,以保持相关性并提供卓越的用户体验…

    2025年12月19日
    000
  • Day / Days of Code:拥抱 JavaScript 的优雅

    2024 年 8 月 12 日星期一 编程和使用语言来创建可以递归地用于创建更多工具的工具,这本身就是一种满足感。虽然编写 HTML 和 CSS 代码确实是编程,因为它允许您构建文本并设置文本样式,但它并没有给我带来同样程度的满足感。我的 C++ 背景让我对使用变量和表达式产生了根深蒂固的热爱。 J…

    2025年12月19日
    000
  • 为什么 JavaScript 不是“真正的”OOP

    javasc++ript 是一种深受许多人喜爱的语言,但在面向对象编程 (oop) 方面,它常常受到一些不好的评价。如果您有 java、c++ 或 c# 等语言的背景,您可能听说 javascript 不是“真正的”oop 语言。但这到底意味着什么呢?让我们解开这个概念并理解为什么 javascri…

    2025年12月19日
    000
  • Devto 系列:如何开始编写代码

    选择一种编程语言并学习 决定编程语言非常重要,特别是当您是初学者时。 话虽如此,学习任何东西的关键就是开始。这可能看起来很困难。有一些最受欢迎且适合初学者的选项可供考虑。不过,C、C++、Java 和 Python 是最流行的高级编程语言。 问自己的第一个问题“为什么我应该学习编码?”。当你回答这个…

    2025年12月19日
    000
  • 理解 JavaScript 中的原型

    作为一名 javasc++ript 开发人员,理解原型至关重要。它们是 javascript 面向对象编程模型的支柱。让我们来解开这个强大的概念: ? 什么是原型 原型是 javascript 对象相互继承功能的一种机制。 javascript 中的每个对象都有一个原型,它充当模板对象。 ? 原型继…

    2025年12月19日
    000
  • c++的std::memory_order是什么 原子操作的内存序详解【并发进阶】

    std::memory_order是一组枚举值,用于约束原子操作周围内存访问的重排行为及跨线程可见性,不改变原子性本身;它解决编译器/CPU重排导致的多线程同步失效问题,含relaxed、consume(弃用)、acquire、release、acq_rel、seq_cst六种,其中acquire-…

    2025年12月19日
    000
  • C++的consteval和constinit是什么_C++20中真正的编译期常量初始化

    consteval 强制函数在编译期求值,如 consteval int square(int n) 只能接受编译期常量参数;constinit 确保变量以常量初始化,如 constinit static int x = 42 避免动态初始化,用于解决静态初始化顺序问题。两者分别强化了编译期计算和初…

    2025年12月19日
    000
  • C++ double转string_C++浮点数转换为字符串

    C++中double转字符串常用方法有四种:1. std::to_string最简单但精度固定为6位;2. std::ostringstream可配合setprecision和fixed精确控制格式;3. C++17的提供高性能无异常转换,适合底层应用;4. fmt库语法现代灵活,支持高精度格式化,…

    2025年12月19日
    000
  • C++如何创建一个静态库(.lib/.a)?(详细步骤)

    C++静态库是将编译后的目标文件(.obj/.o)打包成归档文件(Windows为.lib,Linux/macOS为.a),仅提供已编译符号定义;需分离头文件与实现、只编译不链接、再用ar/lib工具打包,最后在链接时指定头文件路径、库路径及库名。 在C++中创建静态库,本质是把编译后的目标文件(.…

    2025年12月19日
    000
  • C++如何实现一个B-树_C++数据结构之B-树的插入与删除操作图解

    B-树是一种自平衡多路搜索树,所有叶子节点位于同一层,每个节点最多有m-1个关键字、m个子节点,非根节点至少有⌈m/2⌉−1个关键字。插入时从根开始查找插入位置,节点满则分裂,确保不溢出;删除时若关键字在内部节点,用子树最值替换,遍历中保证节点关键字数大于t−1,不足时通过借元素或合并调整。核心操作…

    2025年12月19日
    000
  • c++如何实现外观模式_c++结构型设计模式Facade【简化接口】

    外观模式的核心目标是为复杂子系统提供统一简洁接口以降低耦合度,它不封装功能而整合调用流程,外观类仅协调已有子系统对象的调用顺序与参数传递。 外观模式(Facade)在 C++ 中的核心目标是为一组复杂的子系统提供一个统一、简洁的接口,从而降低客户端与子系统之间的耦合度。它不封装功能,而是“整合调用流…

    2025年12月19日
    000
  • c++中的模板参数推导规则_c++ универсальные ссылки与引用折叠

    模板参数推导结合通用引用和引用折叠实现完美转发,如std::make_unique通过T&&推导实参类型,依据引用折叠规则保持值类别,使std::forward能原样转发参数给目标函数。 在C++中,模板参数推导和引用折叠是理解泛型编程(尤其是完美转发和通用引用)的关键机制。它们共同…

    2025年12月19日
    000
  • c++的std::forward_list是什么 单向链表容器的使用【STL详解】

    std::forward_list 是 C++11 引入的单向无哨兵链表,内存更紧凑、头部操作高效,但不支持随机访问、反向迭代和 O(1) size()(C++17 起可选),适用于内存敏感、头部频繁增删且单向遍历的场景。 std::forward_list 是 C++11 引入的标准模板库(STL…

    2025年12月19日
    000
  • C++如何进行Base64编码和解码?(代码示例)

    Base64 编码解码在 C++ 中无标准库支持,但可使用纯 C++ 实现:编码将每 3 字节转为 4 字符(A–z、0–9、+、/),用 ‘=’ 填充;解码严格校验长度、填充及字符合法性,并支持含空字节和中文的任意二进制数据。 Base64 编码和解码在 C++ 中没有标准…

    2025年12月19日
    000
  • c++的PGO(Profile-Guided Optimization)是什么 如何让编译器深度优化【性能调优】

    PGO是通过真实运行时数据指导编译优化的技术,分插桩、采集、重编译三阶段,依赖高质量剖面数据,可提升性能5%~20%,关键在真实输入、合理配置与环境一致性。 PGO(Profile-Guided Optimization,基于性能剖析的优化)是 C++ 编译器利用真实运行时行为数据来指导优化决策的技…

    2025年12月19日
    000
  • c++的std::optional如何优雅地处理可能不存在的值【教程】

    std::optional 是 C++17 起表达“可能无值”的最自然、类型安全方式,其核心价值在于将“有无值”纳入类型系统,强制编译期检查空状态;推荐显式构造(如 std::nullopt 或直接初始化),避免 {} 模糊语法;访问前必须检查,优先用 has_value() + value() 或…

    2025年12月19日
    000
  • C++17中的std::filesystem如何使用?(文件目录操作)

    c++kquote>std::filesystem 是 C++17 引入的跨平台文件系统库,提供 path 操作、存在性判断、目录遍历、增删改查等安全接口,需包含头文件、处理命名空间并注意编译器链接要求。 std::filesystem 是 C++17 引入的标准库模块,用于跨平台的文件和目录…

    2025年12月19日
    000
  • c++的std::move是如何实现的 强制将左值转换为右值【源码解读】

    std::move 本身不移动任何东西,仅是将左值强制转换为右值引用的类型转换工具,核心实现为 static_cast;它不执行资源转移,后续移动操作才真正触发移动构造/赋值。 std::move 本身不移动任何东西,它只是一个类型转换工具:把左值表达式“标记”为可以被移动的右值引用类型。它的实现极…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信