gpt4 book ai didi

java - 如何使用静态变量编写递归函数

转载 作者:行者123 更新时间:2023-12-02 00:27:11 27 4
gpt4 key购买 nike

我正在尝试编写一段代码来获取猴子可以从 (0,0) 开始访问的点集 (x,y),使得每个点满足 |x| + |y| < _limitSum。我编写了下面的代码,并使用了坐标类型成员的静态 HashSet(此处未显示),并编写了一个递归方法 AccessPositiveQuadrantCooperatives。但问题是,通过递归调用传递的 HashSet 成员并不反射(reflect)在先前调用中添加的坐标成员。有人可以帮助我如何传递对象引用来实现这一点吗?还有其他方法可以解决这个问题吗?

public class MonkeyCoordinates {
public static HashSet<Coordinate> _accessibleCoordinates = null;
private int _limitSum;
public MonkeyCoordinates(int limitSum) {
_limitSum = limitSum;
if (_accessibleCoordinates == null)
_accessibleCoordinates = new HashSet<Coordinate>();
}
public int GetAccessibleCoordinateCount() {
_accessibleCoordinates.clear();
Coordinate start = new Coordinate(0,0);
AccessPositiveQuadrantCoordinates(start);
return (_accessibleCoordinates.size() * 4);
}
private void AccessPositiveQuadrantCoordinates(Coordinate current) {
if (current.getCoordinateSum() > _limitSum) { return; }
System.out.println("debug: The set _accessibleCoordinates is ");
for (Coordinate c : _accessibleCoordinates) {
System.out.println("debug:" + c.getXValue() + " " + c.getYValue());
}

if (!_accessibleCoordinates.contains(current)) { _accessibleCoordinates.add(current); }
AccessPositiveQuadrantCoordinates(current.Move(Coordinate.Direction.East));
AccessPositiveQuadrantCoordinates(current.Move(Coordinate.Direction.North));
}

我会给所有可接受的答案评分。

谢谢,索姆纳特

最佳答案

But the problem is the members of the HashSet passed across the recursive calls is not reflecting the Coordinate members added in previous calls.

我认为这不太可能。我认为您的 Cooperative 类更有可能没有适本地覆盖 equalshashCode ,这就是为什么集合无法“找到”值。

顺便说一句,使用这样的静态变量对我来说似乎是一个非常糟糕的主意 - 为什么不在 GetAccessibleCooperativeCount() 中创建集合并将引用传递给 AccessPositiveQuadrantCooperatives,这又可以在递归调用中继续传递它?

(另外,我强烈建议您开始遵循 Java 命名约定...)

关于java - 如何使用静态变量编写递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9767371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com