一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 503|回复: 2
收起左侧

Berkley CS61B homework 4,5中出现的toString方法空指针问题

[复制链接] |试试Instant~ |关注本帖
weirdzrx 发表于 2016-9-21 14:31:09 | 显示全部楼层 |阅读模式

[其他]CS61b #17 - 2014-09-01@UC Berkley

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
请教一个找了半天都没有发现原因的问题,Berkley的CS61b其中在hw3, hw4, hw5中都出现的一个问题
就是在给的测试代码中的toString()对于空的DList是不能正确输出结果的,每次都会抛出一个NullPointerException的异常,但是由于是直接提供的代码没有进行任何修改,
而且由于有while循环的存在理论上在空DList的时候不会进入循环,但是它给出的异常所在却是在循环体内部,我把tostring方法的代码贴在下面,并且把我DList的创建也贴
在下面,希望同样做过作业的小伙伴能够帮我解答一下,万分感谢!

toString method:
  1. public String toString() {
  2.     String result = "[  ";
  3.     DListNode current = head.next;
  4.     while (current != head) {
  5.       result = result + current.item + "  ";
  6.       current = current.next;
  7.     }
  8.     return result + "]";
  9.   }
复制代码
我的DList创建过程:
  1.   public DList() {
  2.         size = 0;
  3.         head = newNode(null, null, head, head);
  4.     //list = this;       
  5.   }
复制代码
yingy4 发表于 2016-10-15 07:47:46 | 显示全部楼层
本帖最后由 yingy4 于 2016-10-15 07:55 编辑

看到的有点晚了,我的理解是这样的:

head = newNode(null, null, head, head); //你实际上的目的是想把head的next和prev指向自己本身,但语句执行时是从右向左执行的,因此在给head赋值时,你的这句话等价于head=newNode(null,null,null,null); ,因为赋值时head还没有被赋值。

解决的方法可以是:

          head=newNode(null,null,null,null);
          head.next=head;
          head.prev=head;


你可以通过debug模式单步执行来查看head在你赋值后的结果到底是什么,供参考。
回复 支持 反对

使用道具 举报

头像被屏蔽
xiaoyoungha 发表于 2016-10-15 17:31:09 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-8 05:39

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表