小编vig*_*ora的帖子

使用包装类而不是静态变量

这是我在StackOverFlow上的第一个问题:我正在学习采访"Cracking the code interview"(第5版)的书,我正在解决下一个问题:

实现一个函数来检查二叉树是否是二叉搜索树(Q 4.5 pg 86).

在继续之前,我想提醒您二进制搜索树与简单二叉树之间的区别:

二进制搜索树强加了这样的条件:对于所有节点,左子节点小于或等于当前节点,其小于所有右节点.

因此,本书提供的解决方案之一是使用按顺序遍历扫描树,并在运行中检查我们访问的每个节点是否大于最后一个节点,并假设树不能具有重复值:

public static int last_printed = Integer.MIN_VALUE;
public static boolean checkBST(TreeNode n) {
    if(n == null) return true;

        // Check / recurse left
        if (!checkBST(n.left)) return false;

        // Check current
        if (n.data <= last_printed) return false;
        last_printed = n.data;

        // Check / recurse right
        if (!checkBST(n.right)) return false;

        return true; // All good!
}
Run Code Online (Sandbox Code Playgroud)

现在,在这里一切都很好,但随后这本书引用:

如果您不喜欢使用静态变量,那么您可以调整此代码以使用整数的包装类,如下所示:

Class WrapInt {
    public int value;
}     
Run Code Online (Sandbox Code Playgroud)

在这里和其他网站上阅读包装类后,我无法得出结论,为什么以及如何在这里使用包装类而不是静态变量?

java static binary-tree wrapper binary-search-tree

5
推荐指数
1
解决办法
727
查看次数

Future catchError 函数在未立即链接时不会捕获错误

考虑这段代码:
示例 A:

Future<void> fakeCall() async {
  await Future.delayed(const Duration(milliseconds: 300), () {
    throw MyError('myException');
  });
}

Future<void> fetch() async {
  Future<void> testFuture = fakeCall();

  testFuture.whenComplete(() {
    print('when completed');
  });
  testFuture.catchError((e) {
    print('on error');
  });
  return testFuture;
}

void main() async {
 try{
  await fetch();
  }on MyError catch(e){
     //getting here but one still leaks!!
  }
}
Run Code Online (Sandbox Code Playgroud)

打电话时await fetch()我只希望catchError被叫到。但错误以某种方式泄漏,所以基本上抛出了两个......一个被捕获catchError,一个作为未处理的错误泄漏到外面。

但当按照建议的方式使用它时(一个接一个地链接):
示例 B:

Future<void> fakeCall() async {
  await Future.delayed(const Duration(milliseconds: 300), () {
    throw MyError('myException');
  }); …
Run Code Online (Sandbox Code Playgroud)

asynchronous future dart

2
推荐指数
1
解决办法
1117
查看次数