“缩容的值不能为0"这个条件有什么意义?

“缩容的值不能为0"这个条件有什么意义?

    老师您好,我在实现循环队列处理出队操作涉及缩容条件处理时,按我的理解是当把队列所有元素出队之后队列的信息时size=0,capacity=1,我再执行出队操作会因为Queue Is Empty而报错,也不可能再有机会执行后面的缩容操作,那么getCapacity() / 2 != 0这个条件有意义吗?

    谢谢回答!

1
2
3
if(size == getCapacity() / 4  && getCapacity() / 2 != 0){
    resize(getCapacity() / 2);
}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

在我们的实现下,不会出问题。


但比如我们再实现一个构造函数,这个构造函数是根据一个外界已有的静态数组,创建一个动态数组 Array 类,构造函数类似这样(印象里我在课程中提及过我们可以设计这样一个接口):

1
public Array(E[] arr)


如果在这种情况下,我们创建的 data 和传来的 arr 一样大,且 size 也是 arr.length,那么如果用户传来的这个静态数组中只有 1 个元素,在删除这个元素的时候就会出问题。


==========


当然,你仍然可以 argue 我们可以使用各种其他手段避免它出问题,但从逻辑上,我们这样写程序,其实根本不需要考虑这种情况是否会出现。我们下面要调用 resize(k),其中的 k 不能是 0,那么很自然的,我们在调用前,就应该判断 k 不为0。


换句话说,我们下面调用 resize(data.length / 2);,那么一个好的编程实践就是,我们判断确保 data.length / 2 != 0。即使在当下的逻辑下,这种情况不可能发生。在现代编程中,多的这个判断对性能的影响可以忽略不计。


这被称为是防御型编程。因为,你不确定在后续,你(或者其他人)会如何修改你的代码,使得这个条件变得有可能触发,从而产生错误。防御型编程可以让程序更健壮。


继续加油!:)


  • 怦怦 提问者 #1
    理解了,谢谢老师!
    2020-08-22 14:08:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2626    人
  • 解答问题       1105    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码