Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中将两个变量包装到包装器类中_Java - Fatal编程技术网

在java中将两个变量包装到包装器类中

在java中将两个变量包装到包装器类中,java,Java,我正在做leetcodeq230。 问题是 给定一个二元搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。 我在谷歌上搜索了这个问题的一个解决方案,该解决方案提到将两个变量封装到一个包装器类中可能会很好。我不知道如何在包装器类中包装这两个变量(number和count),以及它的用途是什么?我知道Integer是int的包装类 ***better keep these two variables in a wrapper class*** private static in

我正在做leetcodeq230。 问题是 给定一个二元搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。
我在谷歌上搜索了这个问题的一个解决方案,该解决方案提到将两个变量封装到一个包装器类中可能会很好。我不知道如何在包装器类中包装这两个变量(number和count),以及它的用途是什么?我知道Integer是int的包装类

***better keep these two variables in a wrapper class***

private static int number = 0;
private static int count = 0;

public int kthSmallest(TreeNode root, int k) {
    count = k;
    helper(root);
    return number;
}

public void helper(TreeNode n) {
    if (n.left != null) helper(n.left);
    count--;
    if (count == 0) {
        number = n.val;
        return;
    }
    if (n.right != null) helper(n.right);
}

LeetCode(和大多数在线编程站点)的策略是执行您在自己的类中键入的任何代码

在那里有
静态
变量将使它们保持在该类的范围内,因此,不必在您自己的方法之间传递它们

“包装器类”是隐藏的


你也可以自己做

class Wrapper {
    public static int number, count;
} 
并访问
Wrapper.number
Wrapper.count

我不知道如何在包装器类中包装这两个变量(number和count)

您需要创建一个自定义类,将
count
number
作为字段,类似于:

class KthSmallestElementWrapper<T> {
private int kth;
private T result;

public KthSmallestElementWrapper(int kth) {
    this.kth = kth;
}

public static KthSmallestElementWrapper of(int kth) {
    return new KthSmallestElementWrapper(kth);
}

public boolean isDone() {
    return kth == 0;
}

public T getResult() {
    if (result == null) {
        throw new RuntimeException("Result not found");
    }
    return result;
}

public void decreaseCount() {
    kth--;
}

public void setResult(T t) {
    this.result = t;
}
}
KTHSmalestlementWrapper级{
私人int kth;
私人T结果;
公共KTHsmallestlementWrapper(内部kth){
this.kth=kth;
}
公共静态KTHSmalestlementWrapper of(整数kth){
返回新的kth锤式锤击机(kth);
}
公共布尔isDone(){
返回kth==0;
}
公共T getResult(){
如果(结果==null){
抛出新的RuntimeException(“未找到结果”);
}
返回结果;
}
公共无效递减计数(){
kth--;
}
公共无效设置结果(T){
结果=t;
}
}
它有什么好用

除了LeeCode执行提交代码的方式外,创建包装器类还有利于封装。正如上面的代码,您可以将
计数器
结果
封装为一个类,以及一些必要的方法,如testmethod
isDone
和method
decreaseCount


顺便问一下,你测试过你的
helper
方法吗?这是一个递归方法,但我不认为终止条件是正确的。

你的问题会更清楚,看看这些方法在哪里被调用……我很确定它们只是有一个简单的java类,有两个字段number和count谢谢你的回答,但leetcode没有提供调用方的名称。我在尝试传递变量转换为方法时,解决方案是错误的。这将是一个逻辑错误,然后感谢您的回复。我发现将变量设置为静态和将变量包装到类中基本上没有区别。那么为什么将变量包装到类中更好呢?不管怎样,变量都在类中。真正的问题是,在退出方法时,它们是否在方法中被重置,或者是否在整个类中保持作用域。