查看: 1969| 回复: 2
跳转到指定楼层
上一主题 下一主题
收起左侧

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

全局:
公开课
学校名称: UC Berkley
Unit号: 17
开课时间: 2014-09-01
课程全名: CS61b
平台: 其他

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

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.   }
复制代码

上一篇:Coursera VS Udacity: Full Stack
下一篇:Coursera上Princeton算法1,mock interview小组
🔗
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在你赋值后的结果到底是什么,供参考。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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