zoukankan      html  css  js  c++  java
  • 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++;
      }

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

  • 相关阅读:
    屌丝的出路:拼命工作!
    Collections.sort自定义排序的使用方法
    oracle 导入/导出遇到的 问题总结
    JDBC更新10W级以上数据性能优化
    中国特色程序员美好生活出路
    正则表达式的一些基础语法
    Java常用容器类学习总结
    从 ASP.NET 服务器控件插入客户端脚本(转自MSDN)
    ASP.NET Web Page应用深入探讨(强烈建议开发web的人学习)
    剖析 .Net 下的数据访问层技术(转)
  • 原文地址:https://www.cnblogs.com/lyz1995/p/7152615.html
Copyright © 2011-2022 走看看