Java 将新创建的对象作为方法参数传递到该对象的构造函数中

Java passing a newly created object as method argument inside the constructor of that object

提问人:Stelios P.98 提问时间:7/1/2023 更新时间:7/2/2023 访问量:40

问:

我正在尝试用 Java 为游戏实现 UCS 算法,我现在正处于需要计算每个状态的成本的阶段。

我创建了一个包含 4 个字段(状态成本级和级)的类,其中我有一个方法,它返回从节点过渡到节点的成本。NodeTabledoubleNodeArrayList<Node>private static double calculateCost(Node starting, Node next)startingnext

忽略 Table 类,无需解释它的作用。

我还做了以下方法:generateChildren()

public void generateChildren(){
    ArrayList<Table> allStates = this.state.generateMoves();

    for(Table state : allStates){
        Node child = new Node(state, calculateCost(this, ???), this);

        children.add(child);
    }
}

它从给定状态生成所有可能的移动,并且对于每个移动,它都会创建一个子项。

我想要的是作为 的第二个参数传递,以便该对象是起始节点,而 是下一个节点。可能吗?childcalculateCost()thischild

java 参数 this

评论

2赞 AKSingh 7/1/2023
不,这似乎是不可能的。我能想到另一种方法。仅使用 state 和此参数创建子节点。然后计算成本,并在子节点中调用 setter 方法来设置成本。
0赞 MorganS42 7/15/2023
斯泰利奥斯,你读过我的回答吗?

答:

1赞 MorganS42 7/2/2023 #1

您可以完全删除该参数,而是将其移动到 Node 构造函数中。您尚未发布 Node 构造函数当前的外观,因此下面的代码只是一个模板,您可以将其映射到当前解决方案:calculateCost(this, ???)

class Node {
    * before constructor *

    Node(Table state, Node parent) {
        this.state = state;
        this.parent = parent;

        this.cost = calculateCost(parent, this);

        * rest of constructor *
    }

    * after constructor *
}

这应该会产生预期的效果。您的方法现在如下所示:generateChildren

public void generateChildren(){
    ArrayList<Table> allStates = this.state.generateMoves();

    for(Table state : allStates){
        Node child = new Node(state, this);

        children.add(child);
    }
}