首页 > 代码库 > CS61b lab3 分享一个bug,足足找了一个多小时,希望各位别入坑哈
CS61b lab3 分享一个bug,足足找了一个多小时,希望各位别入坑哈
part1:
写一个测试程序,比较简单就不贴代码啦,运行结果:
part2:
改进InserEnd method,我是按照课上讲的把原来的singlyList变成doubleList,在SListNode中多加入一个prev变量,修改后SListNode:
class SListNode { Object item; SListNode next; SListNode prev; SListNode(Object obj) { item = obj; next = null; prev=null; } SListNode(Object obj, SListNode next,SListNode prev) { item = obj; this.next = next; this.prev=prev; } public void setNext(SListNode s){ this.next=s; } public void setPrev(SListNode s){ this.prev=s; } }
之后将原SList中的head变量作为一个
sentinel,修改后head.next为首项,head.prev为末项,不过在编写SList的构造函数时一开始犯了一个错误:
错误代码:
public SList() { size = 0; head = new SListNode(null,head,head); }
本来想着是初始化的时候就将head的next和prev均指向自己,不过在这里head由于本来就是null,所以在未被创建出来的时候不能将其prev和next指向自己(我暂时是这样理解的,各位要有更好的解释给我说一下哈)由于这个bug还是能通过编译器而且不抛出任何错误,所以最后找了好久才意识到233333
修改后代码如下:
public SList() { size = 0; head = new SListNode(null,null,null); head.setPrev(head); head.setNext(head); }
修改后的inserFront和insertEnd:
public void insertFront(Object obj) { SListNode node=new SListNode(obj,head.next,head); head.next.setPrev(node); head.setNext(node); size++; } public void insertEnd(Object obj) { SListNode node=new SListNode(obj,head.prev,head); head.prev.setNext(node); head.setPrev(node); size++; }
其余方法调整下判定条件就行,代码太多就不全贴了,最后运行结果:
CS61b lab3 分享一个bug,足足找了一个多小时,希望各位别入坑哈
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。