cs61b homework4

作业中没给测试代码,测试代码是从一亩三分地论坛上盗的别人的。

运行结果:

DList:

LockDList:

因为List之前的homework和project中已经实现过好几回了,所以感觉这次作业还比较轻松,没有怎么debug就出来了;

贴一下LockDList的代码好了:

LockDListNode:

package list;

public class LockDListNode extends DListNode {

    boolean isLocked;
    LockDListNode(Object i, DListNode p, DListNode n) {
        super(i, p, n);
        isLocked=false;
        // TODO Auto-generated constructor stub
    }

}

LockDList:

package list;

public class LockDList extends DList {
     protected LockDListNode newNode(Object item, DListNode prev, DListNode next) {
            return new LockDListNode(item, prev, next);
          }
     public void lockNode(DListNode node) {
         if(node instanceof LockDListNode)
         ((LockDListNode)node).isLocked=true;
         else
             return;
     }
     public LockDListNode prev(DListNode node) {
            return ((LockDListNode)super.prev(node));
          }
     public LockDListNode next(DListNode node) {
            return ((LockDListNode)super.next(node));
          }
     public LockDListNode front() {
            return((LockDListNode)super.front());
          }
      public LockDListNode back() {
          return ((LockDListNode)super.back());
      }
      public void remove(DListNode node) {
          if(((LockDListNode)node).isLocked)
              return;
          else
              super.remove(node);
      }

}

注意的是:1:子类overwrite方法只需要名称一致就行,返回的type类型可以变。

2:protected关键字在子类和同一package内均可使用(之前以为仅限定子类)

3:newNode方法很有用,可以避免LockDList中的代码重复

4:补充一点lecture里面讲到的关于Field shadow的问题:

choice of methods dictated by dynamic type.

choice of fields dictated by static type.

不知道咋样翻译准确些,就直接写英文的notes好了。

时间: 2024-10-12 15:27:41

cs61b homework4的相关文章

CS61b homework1

Programe1:根据输入建立URL,读取其网站前五行内容并输出,代码: import java.io.*;import java.net.URL;public class programe1{ public static String reverse(String s){ int len=s.length(); StringBuffer sb=new StringBuffer(len); for(int i=(len-1);i>=0;i--){ sb.append(s.charAt(i));

CS61b lab1代码实现及运行结果

task1:程序是已经给好的,放到编译器里找出了几处错误就能运行了,运行结果如图: task2:不知道它这个lab中说的EMAC是什么,只能在eclipese上简单的写了个排序的程序,任务的要求是根据surname排序,不过鉴于surnname是先出现的,简化起见就 没有区分surnname和Given Name,把两个合在一个String里一起排序了.代码如下: import java.io.*;import java.util.ArrayList;import java.util.Array

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

CS61b lab5

part1:父类reference可以指向子类的Object,但子类reference不能指向父类Object,因为子类可能存在更多的method和filed. part2:(a)可以(b,c)不行 (d)可以 interface和superclass的method名称相同,若返回类型和接受参数类型均相同,则不产生歧义可以通过编译,否则则不能通过编译. part3: 接口和父类中的constant会产生歧义,在子类中使用可标明class类型: package lab; class a{ publ

CS61b homework2 打卡

主要考点:String类matches和split方法的运用,正则表达式的运用. 判断闰年,计算天数等算法.代码如下: import java.io.*; public class Date { private int month; private int day; private int year; public Date(int month, int day, int year) { if(!isValidDate(month,day,year)) System.exit(0); this.

cs61b lab10

运行结果: Creating 2-node tree. Testing parent(). Testing insertChild(). Adding two more nodes to the 2-node tree. Adding two more nodes to the 4-node tree. 1132 2131 The tree looks like this: 1 11 12 13 131 132 [The above sequence should be 1, 11, 12, 1

cs61b lab11

实现BinarySearchTree,感觉比前面的2,3,4Tree要简单很多. part1实现find: private BinaryTreeNode findHelper(Comparable key, BinaryTreeNode node) { BinaryTreeNode newnode=node; if(key.compareTo(node.entry.key)==0) return node; else if(key.compareTo(node.entry.key)<0){ if

CS61b homework5

hw5相比hw4,修改了以下的bug,从而更好的实现了对代码的封装: 1:hw4中,remove(n)时,若n不存在于本list却存在于其他list中,会remove其他list中的node,同时减少本list的size. 2:hw5中,listnode本身含有其所包含的list的field,因此可将insertAfter()等方法移到listnode中实现. 3:hw4中,如果在remove(n)后实现insertAfter(n),由于remove后n依然存在,会产生插入的错误. 4:hw4中

cs61b homework7

作业要求只要求实现insert,不过实现起来真的好麻烦啊,感觉可能是最开始分类分的繁琐了,所以后续代码就越加越长,注意在插入的过程中要调整树的结构,如果node中的keys数为3的话,如果该node是root,就拆成三个,如果非root,是将该node中的key2移上去,感觉这点实现起来特别麻烦. 插一波代码(感觉这波代码过长了...) public void insert(int key) { Tree234Node node=root; if(node==null){ root=new Tr