我是编程新手。我的问题可能很笨。(***如果对别人没有价值,我以后会删除这个问题)请看这里的这两个函数。
1.
StringBuilder sb = new StringBuilder();
private String preorder(TreeNode root) {
if(root == null){
sb.append("null,");
}
sb.append(root.val);
sb.append(",");
String l = preorder(root.left);
String r = preorder(root.right);
return sb.toString();
}
2.
StringBuilder sb = new StringBuilder();
private String preorder(TreeNode root) {
if(root == null){
sb.append("null,");
}
else{
sb.append(root.val);
sb.append(",");
String l = preorder(root.left);
String r = preorder(root.right);
}
return sb.toString();
}
如果我在主函数中调用这两个函数。第1个函数会抛出
java.lang.NullPointerException error.
据我了解,当java.lang.NullPointerException发生时。
(这部分的更新。在IF条件之后,不管有无 else,都会执行正文的其他部分,谢谢大家的帮助)
后
if(root == null)
其余的应该是
root != null
如果我说错了,请纠正我。
你缺少一个 else case。
private String preorder(TreeNode root) {
if(root == null){
sb.append("null,");
}else{
// ...
}
你的if条件下面的代码 仍将执行 如果你不加 else
或 return
.
它将抛出一个NPE,因为在你的条件之后,你试图访问 root
与。
sb.append(root.val);
你需要把它当作一个句子来读。
if(thisIsTrue){
// Then do that
}else{
// Do that
}
其中 "thisIsTrue "是你的条件,即 root != null
.
如果你试图访问root的一个成员,并使用 root.val
的地方,在那里你可以尝试访问 val
则根 不得为空,或一个 NullPointerException
会被扔掉。
比喻说.想象你有一袋苹果.你想做的是抓一个苹果,但你没有袋子。
我想这就很清楚了。
如果你省略了 else 子句,那么它将会像下面这样执行。
if(thisIsTrue){
// It will do that, if condition is true
}
// It will ALWAYS execute this, even if condition is false
用ifelse你开两支。只有 一个 的人被处决。
与如果,但没有其他你有一个条件分支,如果条件为真就会被执行,但下面的代码会被执行。始终 之后.