gpt4 book ai didi

java - 比较方法的多个返回值

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:05 25 4
gpt4 key购买 nike

我有一个包含多个节点的数组,每个节点都有其 H、G 和 F 分数。

我通过名为calculateGscore()和calculateHscore()的方法获得H和G分数,它们都返回 double 值,F分数是H+G;

我有一个带有开放节点的ArrayList,我必须找到F分数最低的节点,但我不知道该怎么做,开放的ArrayList可以有1到4个节点,不允许移动。

我现在拥有的是一个 for 循环,如下所示:

 for(int i = 1; i < open.size(); i++){
Gscore = open.get(i).getGscore(); // these methods are in the Node class.
Hscore = open.get(i).getHscore();
Fscore = Gscore + Hscore;

if(Fscore < (calculateGscore(open.get(i-1)) + calculateHscore(open.get(i-1)))){ // these methods are in the pathFinder class.
closed.add(open.get(i));
}
else{
closed.add(open.get(i-1));
open.remove(i-1);
}
}

但是,如果打开列表中有 4 个节点,则此方法不起作用,然后它将向关闭列表添加 2 个节点,而不是唯一的最低节点。

我将此作为作业,因此我无法更改 Node 类中的任何代码,只能更改探路者类中的代码。

最佳答案

请改用以下内容:

double minFscore = open.get(0).getGscore() + open.get(0).getHscore();
Node minScoreNode = open.get(0);

for(int i = 1; i < open.size(); i++) {
Gscore = open.get(i).getGscore(); // these methods are in the Node class.
Hscore = open.get(i).getHscore();
Fscore = Gscore + Hscore;

if (Fscore < minFscore) {
minScoreNode = open.get(i);
minFscore = Fscore;
}
}

open.remove(minScoreNode);
closed.add(minScoreNode);

这将循环遍历每个节点,找到 fScore 最小的节点,然后将该节点从打开列表移动到关闭列表。您的问题是您在查看整个列表之前尝试添加和删除。

关于java - 比较方法的多个返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39860012/

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