【问题标题】:What is the difference between null and isEmpty() in queue [duplicate]队列中的null和isEmpty()有什么区别[重复]
【发布时间】:2019-02-07 04:01:38
【问题描述】:

使用q != null!q.isEmpty()有什么区别?
当我在下面的代码中使用 q!=null 时,它不会被编译。但是 !q.isEmpty() 效果很好。

java

Queue<TreeNode[]> q=new LinkedList<>();
q.add(new TreeNode[]{t1, t2});
while(q!=null){          // is not complied
    TreeNode[] t=q.remove();

    if(t[0]==null || t[1]==null) continue;

    t[0].val+=t[1].val;

    if(t[0].left==null) t[0].left=t[1].left;
    else q.add(new TreeNode[]{t[0].left, t[1].left});

    if(t[0].right==null) t[0].right=t[1].right;
    else q.add(new TreeNode[]{t[0].right, t[1].right});
}

【问题讨论】:

  • 你给出了什么编译错误? while (q != null) 应该编译(虽然它根本没有意义)
  • 但您的主要问题似乎是您不了解 Java 的 null 概念——请查看副本以获取有关此信息的信息
  • 错误指向行“TreeNode[] t=q.remove();” ,显示 NoSuchElementException
  • 您的陈述没有意义,因为您在问题中指出代码无法编译,但在 cmets 中声明它正在引发异常,这意味着代码实际上正在编译并运行但随后抛出异常。恐怕这一切都非常令人困惑。
  • 但另一方面,如果您尝试从空集合中删除元素,则会引发异常是有道理的。这与编译问题无关,您最好阅读这两件事之间的区别。

标签: java null queue is-empty


【解决方案1】:

'q' 永远不会为空,因为您已经用new LinkedList 实例化了它,因此将导致无限循环。因此,在您的示例中,您必须检查列表是否为空。但它应该编译

【讨论】:

  • 我同意实例化之一。但它没有编译,你能看看我刚刚附上的图片吗?它显示了错误。谢谢
  • @CaraJiang:再次这不是编译错误
  • 我同意气垫船。有异常,不是编译错误。
  • Santiago,如果您想通知 Cara 您正在对她发表评论,请在您要通知的连接用户名之前添加 @ 符号,例如:@CaraJiang
  • @HovercraftFullOfEels:好的,谢谢你的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 2011-11-10
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 2012-03-25
相关资源
最近更新 更多