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++;
  }

其余方法调整下判定条件就行,代码太多就不全贴了,最后运行结果:

时间: 2024-12-17 20:31:03

CS61b lab3 分享一个bug,足足找了一个多小时,希望各位别入坑哈的相关文章

找出一个只出现一次的字符

一,问题描述 给定一个字符串,找出一个 其中只出现一次的字符 如"abaccdeff" 只出现一次的字符有 'b'    'd'     'e' 二,问题分析 ①字符集是个常量 ,字符只有那么多.比如ASCII 一共256个,比如 字母表一共只有26个,再比如数字,一共0-9 只有10个 ②出现一次,说明是次数.将字符映射成出现的次数----Map ③数组就是一种特殊的Map,数组的下标是不变的,相当于Key,下标 i 处存储的值就相当于Value 比如,定义一个存储26个字母出现频率

IDEA中feature文件的一个bug

描述: 项目使用了Cucumber,对着 feature 文件内部右键运行的时候,有时候会出现右键菜单不可用且无法消除的情况,必须切换窗口来消除这个菜单. 这个不知道是 IDEA 还是它自带的 Gherkin 插件的一个bug,不是一个大问题,但是总是会误操作点出来. bug复现: 当在 feature(gherkin 语法)文件中,如果对着非 Example 的一个数据右键: 就会弹出以下提示,说找到两个Handler,要你选择一个,随便选择,OK 还是 Cancel 也随便: 然后又会弹出一

一个让服务器CPU飙升的BUG。找了2天才发现。

昨天升级了站点.发现一升级上去,就发现站点服务器CPU开始占用接近100%.但是数据库服务器变化不大 还原回更新之前的代码.立马CPU降低.一开始已经是增加的缓存机制有了问题,采用数据库读取,放到线上依旧. 接着以为是数据统计有问题,删除掉还是一样.最后的最后,通过看到工作线程,发现登录请求也蛮多的. 然后这个登录代码更新到旧版本.就OK了.这次版本对登录进行了重构.直接上代码 错误代码中 登录后直接是使用了user.BbbID,造成了500错误.IIS对这个500错误也会有CPU损耗.于是就飙

(知识分享)软硬件调试九法:第九条规则 如果你不修复一个bug,它将永远 存在

1.查证问题确已被修复 如果遵循了“制造失败”这条规则,就知道如何验证你确实修复了问题.无论问题和修复看起来多么明显,你都无法保证修复是有效的,直到做了测试并验证. 2.查证确实你的修复措施解决了问题 如果你取消这个修复,系统再次出现失败,再应用这个修复,问题消失,才能够证明你确实修复了问题.这样做的原因是,在调试期间,往往会改变一些不属于修复的地方,有时这些改变会隐藏问题,如果没有意识到这一点,发现测试起作用了,就高高兴兴的回家了,因为你做的修复和问题消失毫无关系,因此修复方案到达客户后,可能

CSS IE6、7下关于Position的一个bug问题分享

又好久没来了,小码哥甚是想念 想念我的人.由于近期工作中跟CSS打交道较多,所以偶尔会碰到有关它的一些问题,CSS很强大,尤其是后来的CSS3.鄙人正在学习中,如果就所遇到的问题,分析有偏差,望大家海涵哈!!下面就说说我刚刚遇到的一个问题,也许某些前辈大拿们会在心里BS我,不过对我来说,都是收获!嘎嘎,, 总所周知,我们都知道CSS中的定位position属性是一个相当重要和特殊的属性.它分别有一下几个属性值: position:relative; position:absolute; posi

发现一个骗粉丝的人后发现博客园的一个bug

发现一个骗粉丝的人后发现博客园的一个bug 当你点开这篇文章的时候,如果你已经登录博客园账号,那么你自动回成为我的博客园粉丝,因为我加了自动关注的js,这里并不是想骗粉丝,希望博客园能重视这个bug(当然博客园肯定知道这个bug的).明天早上我会删除掉这段js的. 起因>发现一个骗粉丝的人 经过>他是如何实现骗粉丝的 我的一些思考 1.发现一个骗粉丝的人 今天下班,打开博客园的时候看到这篇文章,点了进去,感觉排版不错,自定义的界面体验非常不错,职业性地点击了主页看了看,发现了一个问题,于是乎有

Win10系统菜单打不开问题的解决,难道是Win10的一个Bug ?

Win10左下角菜单打不开,好痛苦,点击右下角的时间也没反应,各种不爽,折磨了我好几天,重装又不忍心,实在费劲,一堆开发环境要安装,上网找了很多方法都不适用.今天偶然解决了,仔细想了下,难道是Win10的一个Bug? 1.问题和现象 右下角菜单点不开,下面的状态栏的右键也没有反应.时间日期也点不开,音频喇叭同样点不开....各种烦人,百度一堆都无果.... 说明:Win10是正式版,已激活:杀毒也全盘扫描过,因为电脑是开发和办公用,几乎不上其他网站,所以中毒的可能性几乎为0. 2.解决方法 晚上

毕业一年,分享下个人的找工作的体会

应届生毕业季选择了一家国企IT中心干运维工作,工作一年觉得工作没什么挑战性,直接裸辞了,找了两个星期工作,面了5家公司,收到4个邀请 昨天正式入职第二家公司,工资给我开了年薪120K,当然还有其他些福利,薪资方面基本符合个人预期(10K-12K/月) 这份工作是做基础软件开发(开发给程序员使用的工具和软件),个人觉得这份工作很有挑战性毅然选择了这家公司 今天项目经理找我谈心,谈到他为什么会招我这个第一年工作中都没写过一行代码的人进这个项目组,核心的意思是他愿意提供给一位有潜力的年轻人一个机会,让

docker 1.0.0发布以及一个bug依赖apparmor_parser

6月10号docker 1.0稳定版本发布,找了台ubuntu的机器,装了下 ubuntu version:12.04 docker version:1.0.0 装docker的步骤可以看官方文档:https://docs.docker.com/installation/ubuntulinux/ 装好之后,运行docker -d尝试启动docker守护进程,报错如下: [0fcb4ed6] +job serveapi(tcp://127.0.0.1:2375) [0fcb4ed6] +job i